33
34
# check needed Opjects
34
foreach (qw(ParamObject DBObject TicketObject LayoutObject LogObject ConfigObject)) {
35
foreach (qw(ParamObject DBObject TicketObject LayoutObject LogObject QueueObject ConfigObject)) {
35
36
if (!$Self->{$_}) {
36
37
$Self->{LayoutObject}->FatalError(Message => "Got no $_!");
41
$Self->{NewUserID} = $Self->{ParamObject}->GetParam(Param => 'NewUserID') || '';
42
$Self->{OldUserID} = $Self->{ParamObject}->GetParam(Param => 'OldUserID') || '';
43
$Self->{UserSelection} = $Self->{ParamObject}->GetParam(Param => 'UserSelection') || '';
40
$Self->{StateObject} = Kernel::System::State->new(%Param);
41
$Self->{UploadCachObject} = Kernel::System::Web::UploadCache->new(%Param);
44
$Self->{FormID} = $Self->{ParamObject}->GetParam(Param => 'FormID');
45
my @InformUserID = $Self->{ParamObject}->GetArray(Param => 'InformUserID');
46
$Self->{InformUserID} = \@InformUserID;
47
my @InvolvedUserID = $Self->{ParamObject}->GetArray(Param => 'InvolvedUserID');
48
$Self->{InvolvedUserID} = \@InvolvedUserID;
50
if (!$Self->{FormID}) {
51
$Self->{FormID} = $Self->{UploadCachObject}->FormIDCreate();
54
$Self->{Config} = $Self->{ConfigObject}->Get("Ticket::Frontend::$Self->{Action}");
64
if (!$Self->{TicketID}) {
66
return $Self->{LayoutObject}->ErrorScreen(
67
Message => "Need TicketID is given!",
68
Comment => 'Please contact the admin.',
52
71
# check permissions
53
72
if (!$Self->{TicketObject}->Permission(
73
Type => $Self->{Config}->{Permission},
55
74
TicketID => $Self->{TicketID},
56
75
UserID => $Self->{UserID})) {
57
76
# error screen, don't show ticket
58
return $Self->{LayoutObject}->NoPermission(WithHeader => 'yes');
77
return $Self->{LayoutObject}->NoPermission(
78
Message => "You need $Self->{Config}->{Permission} permissions!",
82
my %Ticket = $Self->{TicketObject}->TicketGet(TicketID => $Self->{TicketID});
83
$Self->{LayoutObject}->Block(
86
FormID => $Self->{FormID},
93
if ($Self->{Config}->{RequiredLock}) {
94
if (!$Self->{TicketObject}->LockIsTicketLocked(TicketID => $Self->{TicketID})) {
95
$Self->{TicketObject}->LockSet(
96
TicketID => $Self->{TicketID},
98
UserID => $Self->{UserID}
100
if ($Self->{TicketObject}->OwnerSet(
101
TicketID => $Self->{TicketID},
102
UserID => $Self->{UserID},
103
NewUserID => $Self->{UserID},
106
$Self->{LayoutObject}->Block(
107
Name => 'PropertiesLock',
110
TicketID => $Self->{TicketID},
116
my $AccessOk = $Self->{TicketObject}->OwnerCheck(
117
TicketID => $Self->{TicketID},
118
OwnerID => $Self->{UserID},
121
my $Output = $Self->{LayoutObject}->Header(Value => $Ticket{Number});
122
$Output .= $Self->{LayoutObject}->Warning(
123
Message => "Sorry, you need to be the owner to do this action!",
124
Comment => 'Please change the owner first.',
126
$Output .= $Self->{LayoutObject}->Footer();
130
$Self->{LayoutObject}->Block(
131
Name => 'TicketBack',
134
TicketID => $Self->{TicketID},
141
$Self->{LayoutObject}->Block(
142
Name => 'TicketBack',
63
151
my %GetParam = ();
64
foreach (qw(NewStateID Comment Year Month Day Hour Minute)) {
65
$GetParam{$_} = $Self->{ParamObject}->GetParam(Param => $_);
153
NewStateID NewPriorityID TimeUnits ArticleTypeID Title Body Subject
154
Year Month Day Hour Minute NewOwnerID NewOwnerType OldOwnerID NewResponsibleID
156
AttachmentDelete1 AttachmentDelete2 AttachmentDelete3 AttachmentDelete4
157
AttachmentDelete5 AttachmentDelete6 AttachmentDelete7 AttachmentDelete8
158
AttachmentDelete9 AttachmentDelete10 AttachmentDelete11 AttachmentDelete12
159
AttachmentDelete13 AttachmentDelete14 AttachmentDelete15 AttachmentDelete16
161
$GetParam{$_} = $Self->{ParamObject}->GetParam(Param => $_);
163
# get ticket free text params
165
$GetParam{"TicketFreeKey$_"} = $Self->{ParamObject}->GetParam(Param => "TicketFreeKey$_");
166
$GetParam{"TicketFreeText$_"} = $Self->{ParamObject}->GetParam(Param => "TicketFreeText$_");
168
# get ticket free text params
170
foreach my $Type (qw(Year Month Day Hour Minute)) {
171
$GetParam{"TicketFreeTime".$_.$Type} = $Self->{ParamObject}->GetParam(Param => "TicketFreeTime".$_.$Type);
174
# get article free text params
176
$GetParam{"ArticleFreeKey$_"} = $Self->{ParamObject}->GetParam(Param => "ArticleFreeKey$_");
177
$GetParam{"ArticleFreeText$_"} = $Self->{ParamObject}->GetParam(Param => "ArticleFreeText$_");
179
# rewrap body if exists
180
if ($GetParam{Body}) {
181
my $Size = $Self->{ConfigObject}->Get('Ticket::Frontend::TextAreaNote') || 70;
182
$GetParam{Body} =~ s/(^>.+|.{4,$Size})(?:\s|\z)/$1\n/gm;
68
if ($Self->{Subaction} eq 'Update') {
69
# check new/old user selection
70
if ($Self->{UserSelection} eq 'Old') {
71
if (!$Self->{OldUserID}) {
72
$Output = $Self->{LayoutObject}->Header();
73
$Output .= $Self->{LayoutObject}->Warning(
74
Message => "Sorry, you need to select a previous owner!",
75
Comment => 'Please go back and select one.',
77
$Output .= $Self->{LayoutObject}->Footer();
81
$Self->{NewUserID} = $Self->{OldUserID};
85
if (!$Self->{NewUserID}) {
86
$Output = $Self->{LayoutObject}->Header();
87
$Output .= $Self->{LayoutObject}->Warning(
88
Message => "Sorry, you need to select a new owner!",
89
Comment => 'Please go back and select one.',
91
$Output .= $Self->{LayoutObject}->Footer();
95
# lock ticket && set user id && send notify to new agent
96
if ($Self->{TicketObject}->LockSet(
97
TicketID => $Self->{TicketID},
99
UserID => $Self->{UserID},
101
$Self->{TicketObject}->OwnerSet(
102
TicketID => $Self->{TicketID},
103
UserID => $Self->{UserID},
104
NewUserID => $Self->{NewUserID},
105
Comment => $GetParam{Comment},
108
if ($GetParam{Comment}) {
109
my $ArticleID = $Self->{TicketObject}->ArticleCreate(
185
if ($Self->{Subaction} eq 'Store') {
189
if ($GetParam{NewStateID}) {
190
my %StateData = $Self->{TicketObject}->{StateObject}->StateGet(
191
ID => $GetParam{NewStateID},
194
if ($StateData{TypeName} =~ /^pending/i) {
196
foreach (qw(Year Month Day Hour Minute)) {
197
if (!defined($GetParam{$_})) {
198
$Error{"Date invalid"} = '* invalid';
202
if (!$Self->{TimeObject}->Date2SystemTime(%GetParam, Second => 0)) {
203
$Error{"Date invalid"} = '* invalid';
205
if ($Self->{TimeObject}->Date2SystemTime(%GetParam, Second => 0) < $Self->{TimeObject}->SystemTime()) {
206
$Error{"Date invalid"} = '* invalid';
210
if ($Self->{Config}->{Note}) {
212
if (!$GetParam{Subject}) {
213
$Error{"Subject invalid"} = '* invalid';
216
if (!$GetParam{Body}) {
217
$Error{"Body invalid"} = '* invalid';
222
if ($GetParam{"AttachmentDelete$_"}) {
223
$Error{AttachmentDelete} = 1;
224
$Self->{UploadCachObject}->FormIDRemoveFile(
225
FormID => $Self->{FormID},
231
if ($GetParam{AttachmentUpload}) {
232
$Error{AttachmentUpload} = 1;
233
my %UploadStuff = $Self->{ParamObject}->GetUploadAll(
234
Param => "file_upload",
237
$Self->{UploadCachObject}->FormIDAddFile(
238
FormID => $Self->{FormID},
242
# get all attachments meta data
243
my @Attachments = $Self->{UploadCachObject}->FormIDGetAllFilesMeta(
244
FormID => $Self->{FormID},
249
my %TicketFreeText = ();
251
$TicketFreeText{"TicketFreeKey$_"} = $Self->{TicketObject}->TicketFreeTextGet(
252
TicketID => $Self->{TicketID},
253
Type => "TicketFreeKey$_",
254
Action => $Self->{Action},
255
UserID => $Self->{UserID},
257
$TicketFreeText{"TicketFreeText$_"} = $Self->{TicketObject}->TicketFreeTextGet(
258
TicketID => $Self->{TicketID},
259
Type => "TicketFreeText$_",
260
Action => $Self->{Action},
261
UserID => $Self->{UserID},
264
my %TicketFreeTextHTML = $Self->{LayoutObject}->AgentFreeText(
265
Config => \%TicketFreeText,
266
Ticket => \%GetParam,
269
my %TicketFreeTimeHTML = $Self->{LayoutObject}->AgentFreeDate(
271
Ticket => \%GetParam,
274
my %ArticleFreeText = ();
276
$ArticleFreeText{"ArticleFreeKey$_"} = $Self->{TicketObject}->ArticleFreeTextGet(
277
TicketID => $Self->{TicketID},
278
Type => "ArticleFreeKey$_",
279
Action => $Self->{Action},
280
UserID => $Self->{UserID},
282
$ArticleFreeText{"ArticleFreeText$_"} = $Self->{TicketObject}->ArticleFreeTextGet(
283
TicketID => $Self->{TicketID},
284
Type => "ArticleFreeText$_",
285
Action => $Self->{Action},
286
UserID => $Self->{UserID},
289
my %ArticleFreeTextHTML = $Self->{LayoutObject}->TicketArticleFreeText(
290
Config => \%ArticleFreeText,
291
Article => \%GetParam,
293
my $Output = $Self->{LayoutObject}->Header(Value => $Ticket{TicketNumber});
294
$Output .= $Self->{LayoutObject}->NavigationBar();
295
$Output .= $Self->_Mask(
296
Attachments => \@Attachments,
300
%ArticleFreeTextHTML,
304
$Output .= $Self->{LayoutObject}->Footer();
307
if ($Self->{Config}->{Title}) {
308
if (defined($GetParam{Title})) {
309
$Self->{TicketObject}->TicketTitleUpdate(
310
Title => $GetParam{Title},
311
TicketID => $Self->{TicketID},
312
UserID => $Self->{UserID},
316
if ($Self->{Config}->{Owner}) {
317
if ($GetParam{NewOwnerType} eq 'Old' && $GetParam{OldOwnerID}) {
318
$Self->{TicketObject}->LockSet(
319
TicketID => $Self->{TicketID},
321
UserID => $Self->{UserID},
323
$Self->{TicketObject}->OwnerSet(
324
TicketID => $Self->{TicketID},
325
UserID => $Self->{UserID},
326
NewUserID => $GetParam{OldOwnerID},
327
Comment => $GetParam{Body},
329
$GetParam{NoAgentNotify} = 1;
331
elsif ($GetParam{NewOwnerID}) {
332
$Self->{TicketObject}->LockSet(
333
TicketID => $Self->{TicketID},
335
UserID => $Self->{UserID},
337
$Self->{TicketObject}->OwnerSet(
338
TicketID => $Self->{TicketID},
339
UserID => $Self->{UserID},
340
NewUserID => $GetParam{NewOwnerID},
341
Comment => $GetParam{Body},
343
$GetParam{NoAgentNotify} = 1;
346
if ($Self->{Config}->{Responsible}) {
347
if ($GetParam{NewResponsibleID}) {
348
$Self->{TicketObject}->ResponsibleSet(
349
TicketID => $Self->{TicketID},
350
UserID => $Self->{UserID},
351
NewUserID => $GetParam{NewResponsibleID},
352
Comment => $GetParam{Body},
354
$GetParam{NoAgentNotify} = 1;
359
if ($Self->{Config}->{Note}) {
360
$ArticleID = $Self->{TicketObject}->ArticleCreate(
110
361
TicketID => $Self->{TicketID},
111
ArticleType => 'note-internal',
112
362
SenderType => 'agent',
113
363
From => "$Self->{UserFirstname} $Self->{UserLastname} <$Self->{UserEmail}>",
114
Subject => $Self->{LayoutObject}->Output(Template => $Self->{ConfigObject}->Get('Ticket::Frontend::OwnerSubject') || '$Text{"Owner Update"}'),
115
Body => $GetParam{Comment},
116
364
ContentType => "text/plain; charset=$Self->{LayoutObject}->{'UserCharset'}",
117
365
UserID => $Self->{UserID},
118
HistoryType => 'AddNote',
119
HistoryComment => '%%Owner',
120
NoAgentNotify => 1, # because of owner updated notify
123
if ($Self->{ConfigObject}->Get('Ticket::Frontend::OwnerSetState') && $GetParam{NewStateID}) {
124
$Self->{TicketObject}->StateSet(
125
TicketID => $Self->{TicketID},
126
StateID => $GetParam{NewStateID},
127
UserID => $Self->{UserID},
129
# unlock the ticket after close
130
my %StateData = $Self->{TicketObject}->{StateObject}->StateGet(
131
ID => $GetParam{NewStateID},
133
# set unlock on close
134
if ($StateData{TypeName} =~ /^close/i) {
135
$Self->{TicketObject}->LockSet(
136
TicketID => $Self->{TicketID},
138
UserID => $Self->{UserID},
142
elsif ($StateData{TypeName} =~ /^pending/i) {
143
$Self->{TicketObject}->TicketPendingTimeSet(
144
UserID => $Self->{UserID},
145
TicketID => $Self->{TicketID},
151
return $Self->{LayoutObject}->Redirect(OP => $Self->{LastScreenView});
154
return $Self->{LayoutObject}->ErrorScreen();
366
HistoryType => $Self->{Config}->{HistoryType},
367
HistoryComment => $Self->{Config}->{HistoryComment},
368
ForceNotificationToUserID => [@{$Self->{InformUserID}}, @{$Self->{InvolvedUserID}}, ],
373
return $Self->{LayoutObject}->ErrorScreen();
376
if ($GetParam{TimeUnits}) {
377
$Self->{TicketObject}->TicketAccountTime(
378
TicketID => $Self->{TicketID},
379
ArticleID => $ArticleID,
380
TimeUnit => $GetParam{TimeUnits},
381
UserID => $Self->{UserID},
384
# get pre loaded attachment
385
my @AttachmentData = $Self->{UploadCachObject}->FormIDGetAllFilesData(
386
FormID => $Self->{FormID},
388
foreach my $Ref (@AttachmentData) {
389
$Self->{TicketObject}->ArticleWriteAttachment(
391
ArticleID => $ArticleID,
392
UserID => $Self->{UserID},
395
# get submit attachment
396
my %UploadStuff = $Self->{ParamObject}->GetUploadAll(
397
Param => 'file_upload',
401
$Self->{TicketObject}->ArticleWriteAttachment(
403
ArticleID => $ArticleID,
404
UserID => $Self->{UserID},
407
# remove pre submited attachments
408
$Self->{UploadCachObject}->FormIDRemove(FormID => $Self->{FormID});
410
# set ticket free text
412
if (defined($GetParam{"TicketFreeKey$_"})) {
413
$Self->{TicketObject}->TicketFreeTextSet(
414
TicketID => $Self->{TicketID},
415
Key => $GetParam{"TicketFreeKey$_"},
416
Value => $GetParam{"TicketFreeText$_"},
418
UserID => $Self->{UserID},
422
# set ticket free time
424
if (defined($GetParam{"TicketFreeTime".$_."Year"}) &&
425
defined($GetParam{"TicketFreeTime".$_."Month"}) &&
426
defined($GetParam{"TicketFreeTime".$_."Day"}) &&
427
defined($GetParam{"TicketFreeTime".$_."Hour"}) &&
428
defined($GetParam{"TicketFreeTime".$_."Minute"})) {
429
my %Time = $Self->{LayoutObject}->TransfromDateSelection(
431
Prefix => "TicketFreeTime".$_,
433
$Self->{TicketObject}->TicketFreeTimeSet(
435
Prefix => "TicketFreeTime",
436
TicketID => $Self->{TicketID},
438
UserID => $Self->{UserID},
442
# set article free text
444
if (defined($GetParam{"ArticleFreeKey$_"})) {
445
$Self->{TicketObject}->ArticleFreeTextSet(
446
TicketID => $Self->{TicketID},
447
ArticleID => $ArticleID,
448
Key => $GetParam{"ArticleFreeKey$_"},
449
Value => $GetParam{"ArticleFreeText$_"},
451
UserID => $Self->{UserID},
456
if ($Self->{Config}->{Priority} && $GetParam{NewPriorityID}) {
457
$Self->{TicketObject}->PrioritySet(
458
TicketID => $Self->{TicketID},
459
PriorityID => $GetParam{NewPriorityID},
460
UserID => $Self->{UserID},
464
if ($Self->{Config}->{State} && $GetParam{NewStateID}) {
465
$Self->{TicketObject}->StateSet(
466
TicketID => $Self->{TicketID},
467
StateID => $GetParam{NewStateID},
468
UserID => $Self->{UserID},
470
# unlock the ticket after close
471
my %StateData = $Self->{TicketObject}->{StateObject}->StateGet(
472
ID => $GetParam{NewStateID},
474
# set unlock on close
475
if ($StateData{TypeName} =~ /^close/i) {
476
$Self->{TicketObject}->LockSet(
477
TicketID => $Self->{TicketID},
479
UserID => $Self->{UserID},
483
elsif ($StateData{TypeName} =~ /^pending/i) {
484
$Self->{TicketObject}->TicketPendingTimeSet(
485
UserID => $Self->{UserID},
486
TicketID => $Self->{TicketID},
490
return $Self->{LayoutObject}->Redirect(OP => $Self->{LastScreenOverview});
493
return $Self->{LayoutObject}->Redirect(OP => $Self->{LastScreenView});
159
my %Ticket = $Self->{TicketObject}->TicketGet(TicketID => $Self->{TicketID});
160
my $OwnerID = $Self->{TicketObject}->OwnerCheck(TicketID => $Self->{TicketID});
161
$Output .= $Self->{LayoutObject}->Header(Value => $Ticket{TicketNumber});
497
if (!defined($GetParam{Body}) && $Self->{Config}->{Body}) {
498
$GetParam{Body} = $Self->{LayoutObject}->Output(Template => $Self->{Config}->{Body});
500
if (!defined($GetParam{Subject}) && $Self->{Config}->{Subject}) {
501
$GetParam{Subject} = $Self->{LayoutObject}->Output(Template => $Self->{Config}->{Subject});
503
# get free text config options
504
my %TicketFreeText = ();
506
$TicketFreeText{"TicketFreeKey$_"} = $Self->{TicketObject}->TicketFreeTextGet(
507
TicketID => $Self->{TicketID},
508
Type => "TicketFreeKey$_",
509
Action => $Self->{Action},
510
UserID => $Self->{UserID},
512
$TicketFreeText{"TicketFreeText$_"} = $Self->{TicketObject}->TicketFreeTextGet(
513
TicketID => $Self->{TicketID},
514
Type => "TicketFreeText$_",
515
Action => $Self->{Action},
516
UserID => $Self->{UserID},
519
my %TicketFreeTextHTML = $Self->{LayoutObject}->AgentFreeText(
521
Config => \%TicketFreeText,
523
# get free text params
524
my %TicketFreeTime = ();
526
if ($Ticket{"TicketFreeTime".$_}) {
527
($TicketFreeTime{"TicketFreeTime".$_.'Secunde'}, $TicketFreeTime{"TicketFreeTime".$_.'Minute'}, $TicketFreeTime{"TicketFreeTime".$_.'Hour'}, $TicketFreeTime{"TicketFreeTime".$_.'Day'}, $TicketFreeTime{"TicketFreeTime".$_.'Month'}, $TicketFreeTime{"TicketFreeTime".$_.'Year'}) = $Self->{TimeObject}->SystemTime2Date(
528
SystemTime => $Self->{TimeObject}->TimeStamp2SystemTime(
529
String => $Ticket{"TicketFreeTime".$_},
535
my %TicketFreeTimeHTML = $Self->{LayoutObject}->AgentFreeDate(
536
Ticket => \%TicketFreeTime,
538
# get article free text config options
539
my %ArticleFreeText = ();
541
$ArticleFreeText{"ArticleFreeKey$_"} = $Self->{TicketObject}->ArticleFreeTextGet(
542
TicketID => $Self->{TicketID},
543
Type => "ArticleFreeKey$_",
544
Action => $Self->{Action},
545
UserID => $Self->{UserID},
547
$ArticleFreeText{"ArticleFreeText$_"} = $Self->{TicketObject}->ArticleFreeTextGet(
548
TicketID => $Self->{TicketID},
549
Type => "ArticleFreeText$_",
550
Action => $Self->{Action},
551
UserID => $Self->{UserID},
554
my %ArticleFreeTextHTML = $Self->{LayoutObject}->TicketArticleFreeText(
555
Config => \%ArticleFreeText,
556
Article => \%GetParam,
559
my $Output = $Self->{LayoutObject}->Header(Value => $Ticket{TicketNumber});
162
560
$Output .= $Self->{LayoutObject}->NavigationBar();
561
$Output .= $Self->_Mask(
566
%ArticleFreeTextHTML,
568
$Output .= $Self->{LayoutObject}->Footer();
576
my %Ticket = $Self->{TicketObject}->TicketGet(TicketID => $Self->{TicketID});
578
if ($Self->{Config}->{Title}) {
579
$Self->{LayoutObject}->Block(
584
if ($Self->{Config}->{Owner}) {
163
585
# get user of own groups
164
586
my %ShownUsers = ();
165
587
my %AllGroupsMembers = $Self->{UserObject}->UserList(
185
607
my @OldUserInfo = $Self->{TicketObject}->OwnerList(TicketID => $Self->{TicketID});
187
$Output .= $Self->MaskOwner(
189
OptionStrg => \%ShownUsers,
190
OldUser => \@OldUserInfo,
191
TicketID => $Self->{TicketID},
193
QueueID => $Self->{QueueID},
195
$Output .= $Self->{LayoutObject}->Footer();
204
$Param{'OptionStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
205
Data => $Param{OptionStrg},
206
Selected => $Param{OwnerID},
209
OnClick => "change_selected(0)",
212
if ($Param{OldUser}) {
214
foreach my $User (reverse @{$Param{OldUser}}) {
216
if (!$UserHash{$User->{UserID}}) {
217
$UserHash{$User->{UserID}} = "$Counter: $User->{UserLastname} ".
218
"$User->{UserFirstname} ($User->{UserLogin})";
228
$Param{'OldUserStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
230
SelectedID => $Param{OldUser}->[0]->{UserID}.'1',
232
OnClick => "change_selected(2)",
236
if ($Self->{ConfigObject}->Get('Ticket::Frontend::OwnerSetState')) {
237
my %NextStates = $Self->{TicketObject}->StateList(
238
Type => 'DefaultNextOwner',
608
$Param{'OwnerStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
609
Data => \%ShownUsers,
610
SelectedID => $Param{NewOwnerID},
611
Name => 'NewOwnerID',
613
OnClick => "change_selected(0)",
618
foreach my $User (reverse @OldUserInfo) {
620
if (!$UserHash{$User->{UserID}}) {
621
$UserHash{$User->{UserID}} = "$Counter: $User->{UserLastname} ".
622
"$User->{UserFirstname} ($User->{UserLogin})";
631
my $OldOwnerSelectedID = '';
632
if ($Param{OldOwnerID}) {
633
$OldOwnerSelectedID = $Param{OldOwnerID};
635
elsif ($OldUserInfo[0]->{UserID}) {
636
$OldOwnerSelectedID = $OldUserInfo[0]->{UserID} . '1';
639
$Param{'OldOwnerStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
641
SelectedID => $OldOwnerSelectedID,
642
Name => 'OldOwnerID',
643
OnClick => "change_selected(2)",
645
if ($Param{NewOwnerType} && $Param{NewOwnerType} eq 'Old') {
646
$Param{'NewOwnerType::Old'} = 'checked="checked"';
649
$Param{'NewOwnerType::New'} = 'checked="checked"';
651
$Self->{LayoutObject}->Block(
655
$Self->{LayoutObject}->Block(
660
if ($Self->{Config}->{Responsible}) {
661
# get user of own groups
663
my %AllGroupsMembers = $Self->{UserObject}->UserList(
667
if ($Self->{ConfigObject}->Get('Ticket::ChangeOwnerToEveryone')) {
668
%ShownUsers = %AllGroupsMembers;
671
my $GID = $Self->{QueueObject}->GetQueueGroupID(QueueID => $Ticket{QueueID});
672
my %MemberList = $Self->{GroupObject}->GroupMemberList(
678
foreach (keys %MemberList) {
679
$ShownUsers{$_} = $AllGroupsMembers{$_};
683
$Param{'ResponsibleStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
684
Data => \%ShownUsers,
685
SelectedID => $Param{NewResponsibleID} || $Ticket{ResponsibleID},
686
Name => 'NewResponsibleID',
689
$Self->{LayoutObject}->Block(
690
Name => 'Responsible',
694
if ($Self->{Config}->{State}) {
696
my %StateList = $Self->{TicketObject}->StateList(
239
697
Action => $Self->{Action},
240
698
TicketID => $Self->{TicketID},
241
699
UserID => $Self->{UserID},
243
$NextStates{''} = '-';
701
if (!$Self->{Config}->{StateDefault}) {
702
$StateList{''} = '-';
703
# $State{SelectedID} = $Param{StateID};
705
if (!$Param{NewStateID}) {
706
if ($Self->{Config}->{StateDefault}) {
707
$State{Selected} = $Self->{Config}->{StateDefault};
711
$State{SelectedID} = $Param{NewStateID};
244
713
# build next states string
245
$Param{'NextStatesStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
246
Data => \%NextStates,
714
$Param{'StateStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
247
716
Name => 'NewStateID',
248
SelectedID => $Param{NewStateID},
250
$Param{DateString} = $Self->{LayoutObject}->BuildDateSelection(
251
Format => 'DateInputFormatLong',
252
DiffTime => $Self->{ConfigObject}->Get('Ticket::Frontend::PendingDiffTime') || 0,
255
$Self->{LayoutObject}->Block(
260
# create & return output
261
return $Self->{LayoutObject}->Output(
262
TemplateFile => 'AgentTicketOwner',
719
$Self->{LayoutObject}->Block(
723
foreach (sort keys %StateList) {
725
my %StateData = $Self->{TicketObject}->{StateObject}->StateGet(
728
if ($StateData{TypeName} =~ /pending/i) {
729
$Param{DateString} = $Self->{LayoutObject}->BuildDateSelection(
730
Format => 'DateInputFormatLong',
731
DiffTime => $Self->{ConfigObject}->Get('Ticket::Frontend::PendingDiffTime') || 0,
734
$Self->{LayoutObject}->Block(
735
Name => 'StatePending',
744
if ($Self->{Config}->{Priority}) {
746
my %PriorityList = $Self->{TicketObject}->PriorityList(
747
UserID => $Self->{UserID},
748
TicketID => $Self->{TicketID},
750
if (!$Self->{Config}->{PriorityDefault}) {
751
$PriorityList{''} = '-';
752
# $Priority{SelectedID} = $Param{PriorityID};
754
if (!$Param{NewPriorityID}) {
755
if ($Self->{Config}->{PriorityDefault}) {
756
$Priority{Selected} = $Self->{Config}->{PriorityDefault};
760
$Priority{SelectedID} = $Param{NewPriorityID};
762
$Param{'PriorityStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
763
Data => \%PriorityList,
764
Name => 'NewPriorityID',
767
$Self->{LayoutObject}->Block(
772
if ($Self->{Config}->{Note}) {
773
$Self->{LayoutObject}->Block(
777
$Self->{LayoutObject}->Block(
782
if ($Self->{Config}->{InformAgent}) {
784
my %AllGroupsMembers = $Self->{UserObject}->UserList(
788
my $GID = $Self->{QueueObject}->GetQueueGroupID(QueueID => $Ticket{QueueID});
789
my %MemberList = $Self->{GroupObject}->GroupMemberList(
795
foreach (keys %MemberList) {
796
$ShownUsers{$_} = $AllGroupsMembers{$_};
798
$Param{'OptionStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
799
Data => \%ShownUsers,
800
SelectedIDRefArray => $Self->{InformUserID},
801
Name => 'InformUserID',
805
$Self->{LayoutObject}->Block(
806
Name => 'InformAgent',
811
if ($Self->{Config}->{InvolvedAgent}) {
812
my @UserIDs = $Self->{TicketObject}->InvolvedAgents(TicketID => $Self->{TicketID});
815
foreach my $User (reverse @UserIDs) {
817
if (!$UserHash{$User->{UserID}}) {
818
$UserHash{$User->{UserID}} = "$Counter: $User->{UserLastname} ".
819
"$User->{UserFirstname} ($User->{UserLogin})";
822
$Param{'InvolvedAgentStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
824
SelectedIDRefArray => $Self->{InvolvedUserID},
825
Name => 'InvolvedUserID',
829
$Self->{LayoutObject}->Block(
830
Name => 'InvolvedAgent',
835
if ($Self->{ConfigObject}->Get('SpellChecker') && $Self->{LayoutObject}->{BrowserJavaScriptSupport}) {
836
$Self->{LayoutObject}->Block(
837
Name => 'SpellCheck',
842
foreach my $DataRef (@{$Param{Attachments}}) {
843
$Self->{LayoutObject}->Block(
844
Name => 'Attachment',
848
# build ArticleTypeID string
849
my %ArticleType = ();
850
if (!$Param{ArticleTypeID}) {
851
$ArticleType{Selected} = $Self->{Config}->{ArticleTypeDefault};
854
$ArticleType{SelectedID} = $Param{ArticleTypeID};
857
my %DefaultNoteTypes = %{$Self->{Config}->{ArticleTypes}};
858
my %NoteTypes = $Self->{DBObject}->GetTableData(
859
Table => 'article_type',
863
foreach (keys %NoteTypes) {
864
if (!$DefaultNoteTypes{$NoteTypes{$_}}) {
865
delete $NoteTypes{$_};
868
$Param{'ArticleTypeStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
870
Name => 'ArticleTypeID',
873
$Self->{LayoutObject}->Block(
874
Name => 'ArticleType',
877
# show time accounting box
878
if ($Self->{ConfigObject}->Get('Ticket::Frontend::AccountTime')) {
879
$Self->{LayoutObject}->Block(
880
Name => 'TimeUnitsJs',
883
$Self->{LayoutObject}->Block(
893
if ($Self->{Config}->{'TicketFreeText'}->{$Count}) {
894
$Self->{LayoutObject}->Block(
895
Name => 'TicketFreeText',
897
TicketFreeKeyField => $Param{'TicketFreeKeyField'.$Count},
898
TicketFreeTextField => $Param{'TicketFreeTextField'.$Count},
902
$Self->{LayoutObject}->Block(
903
Name => 'TicketFreeText'.$Count,
914
if ($Self->{Config}->{'TicketFreeTime'}->{$Count}) {
915
$Self->{LayoutObject}->Block(
916
Name => 'TicketFreeTime',
918
TicketFreeTimeKey => $Self->{ConfigObject}->Get('TicketFreeTimeKey'.$Count),
919
TicketFreeTime => $Param{'TicketFreeTime'.$Count},
923
$Self->{LayoutObject}->Block(
924
Name => 'TicketFreeTime'.$Count,
936
if ($Self->{Config}->{'ArticleFreeText'}->{$Count}) {
937
$Self->{LayoutObject}->Block(
938
Name => 'ArticleFreeText',
940
ArticleFreeKeyField => $Param{'ArticleFreeKeyField'.$Count},
941
ArticleFreeTextField => $Param{'ArticleFreeTextField'.$Count},
945
$Self->{LayoutObject}->Block(
946
Name => 'ArticleFreeText'.$Count,
955
return $Self->{LayoutObject}->Output(TemplateFile => 'AgentTicketOwner', Data => \%Param);