51
64
if (!$Self->{TicketID}) {
53
66
return $Self->{LayoutObject}->ErrorScreen(
54
Message => "No TicketID is given!",
67
Message => "Need TicketID is given!",
55
68
Comment => 'Please contact the admin.',
58
71
# check permissions
59
72
if (!$Self->{TicketObject}->Permission(
73
Type => $Self->{Config}->{Permission},
61
74
TicketID => $Self->{TicketID},
62
75
UserID => $Self->{UserID})) {
63
76
# error screen, don't show ticket
64
return $Self->{LayoutObject}->NoPermission(WithHeader => 'yes');
67
my ($OwnerID, $OwnerLogin) = $Self->{TicketObject}->OwnerCheck(
68
TicketID => $Self->{TicketID},
77
return $Self->{LayoutObject}->NoPermission(
78
Message => "You need $Self->{Config}->{Permission} permissions!",
70
if ($OwnerID != $Self->{UserID}) {
71
$Output .= $Self->{LayoutObject}->Header(Title => 'Error');
72
$Output .= $Self->{LayoutObject}->Warning(
73
Message => "Sorry, the current owner is $OwnerLogin!",
74
Comment => 'Please change the owner first.',
76
$Output .= $Self->{LayoutObject}->Footer();
82
my %Ticket = $Self->{TicketObject}->TicketGet(TicketID => $Self->{TicketID});
83
$Self->{LayoutObject}->Block(
86
FormID => $Self->{FormID},
81
if ($Self->{Subaction} eq 'Update') {
83
if ($Self->{TicketObject}->PrioritySet(
84
TicketID => $Self->{TicketID},
85
PriorityID => $Self->{PriorityID},
86
UserID => $Self->{UserID},
89
return $Self->{LayoutObject}->Redirect(OP => $Self->{LastScreenView});
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},
92
$Output .= $Self->{LayoutObject}->Header(Title => 'Warning');
93
$Output .= $Self->{LayoutObject}->Warning();
94
$Output .= $Self->{LayoutObject}->Footer();
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},
100
my %Ticket = $Self->{TicketObject}->TicketGet(TicketID => $Self->{TicketID});
101
$Output .= $Self->{LayoutObject}->Header(Value => $Ticket{TicketNumber});
102
$Output .= $Self->{LayoutObject}->NavigationBar();
103
# get and priority priority states
104
$Param{'OptionStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
141
$Self->{LayoutObject}->Block(
142
Name => 'TicketBack',
106
$Self->{TicketObject}->PriorityList(
107
UserID => $Self->{UserID},
108
TicketID => $Ticket{TicketID},
111
Name => 'PriorityID',
112
SelectedID => $Ticket{PriorityID},
114
# create & return output
115
$Output .= $Self->{LayoutObject}->Output(
116
TemplateFile => 'AgentTicketPriority',
117
Data => { %Param, %Ticket, },
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;
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(
361
TicketID => $Self->{TicketID},
362
SenderType => 'agent',
363
From => "$Self->{UserFirstname} $Self->{UserLastname} <$Self->{UserEmail}>",
364
ContentType => "text/plain; charset=$Self->{LayoutObject}->{'UserCharset'}",
365
UserID => $Self->{UserID},
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});
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});
560
$Output .= $Self->{LayoutObject}->NavigationBar();
561
$Output .= $Self->_Mask(
566
%ArticleFreeTextHTML,
119
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}) {
585
# get user of own groups
587
my %AllGroupsMembers = $Self->{UserObject}->UserList(
591
if ($Self->{ConfigObject}->Get('Ticket::ChangeOwnerToEveryone')) {
592
%ShownUsers = %AllGroupsMembers;
595
my $GID = $Self->{QueueObject}->GetQueueGroupID(QueueID => $Ticket{QueueID});
596
my %MemberList = $Self->{GroupObject}->GroupMemberList(
602
foreach (keys %MemberList) {
603
$ShownUsers{$_} = $AllGroupsMembers{$_};
607
my @OldUserInfo = $Self->{TicketObject}->OwnerList(TicketID => $Self->{TicketID});
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})";
632
$Param{'OldOwnerStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
634
SelectedID => $Param{OldOwnerID} || $OldUserInfo[0]->{UserID}.'1',
635
Name => 'OldOwnerID',
636
OnClick => "change_selected(2)",
638
if ($Param{NewOwnerType} && $Param{NewOwnerType} eq 'Old') {
639
$Param{'NewOwnerType::Old'} = 'checked="checked"';
642
$Param{'NewOwnerType::New'} = 'checked="checked"';
644
$Self->{LayoutObject}->Block(
648
$Self->{LayoutObject}->Block(
653
if ($Self->{Config}->{Responsible}) {
654
# get user of own groups
656
my %AllGroupsMembers = $Self->{UserObject}->UserList(
660
if ($Self->{ConfigObject}->Get('Ticket::ChangeOwnerToEveryone')) {
661
%ShownUsers = %AllGroupsMembers;
664
my $GID = $Self->{QueueObject}->GetQueueGroupID(QueueID => $Ticket{QueueID});
665
my %MemberList = $Self->{GroupObject}->GroupMemberList(
671
foreach (keys %MemberList) {
672
$ShownUsers{$_} = $AllGroupsMembers{$_};
676
$Param{'ResponsibleStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
677
Data => \%ShownUsers,
678
SelectedID => $Param{NewResponsibleID} || $Ticket{ResponsibleID},
679
Name => 'NewResponsibleID',
682
$Self->{LayoutObject}->Block(
683
Name => 'Responsible',
687
if ($Self->{Config}->{State}) {
689
my %StateList = $Self->{TicketObject}->StateList(
690
Action => $Self->{Action},
691
TicketID => $Self->{TicketID},
692
UserID => $Self->{UserID},
694
if (!$Self->{Config}->{StateDefault}) {
695
$StateList{''} = '-';
696
# $State{SelectedID} = $Param{StateID};
698
if (!$Param{NewStateID}) {
699
if ($Self->{Config}->{StateDefault}) {
700
$State{Selected} = $Self->{Config}->{StateDefault};
704
$State{SelectedID} = $Param{NewStateID};
706
# build next states string
707
$Param{'StateStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
709
Name => 'NewStateID',
712
$Self->{LayoutObject}->Block(
716
foreach (sort keys %StateList) {
718
my %StateData = $Self->{TicketObject}->{StateObject}->StateGet(
721
if ($StateData{TypeName} =~ /pending/i) {
722
$Param{DateString} = $Self->{LayoutObject}->BuildDateSelection(
723
Format => 'DateInputFormatLong',
724
DiffTime => $Self->{ConfigObject}->Get('Ticket::Frontend::PendingDiffTime') || 0,
727
$Self->{LayoutObject}->Block(
728
Name => 'StatePending',
737
if ($Self->{Config}->{Priority}) {
739
my %PriorityList = $Self->{TicketObject}->PriorityList(
740
UserID => $Self->{UserID},
741
TicketID => $Self->{TicketID},
743
if (!$Self->{Config}->{PriorityDefault}) {
744
$PriorityList{''} = '-';
745
# $Priority{SelectedID} = $Param{PriorityID};
747
if (!$Param{NewPriorityID}) {
748
if ($Self->{Config}->{PriorityDefault}) {
749
$Priority{Selected} = $Self->{Config}->{PriorityDefault};
753
$Priority{SelectedID} = $Param{NewPriorityID};
755
$Param{'PriorityStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
756
Data => \%PriorityList,
757
Name => 'NewPriorityID',
760
$Self->{LayoutObject}->Block(
765
if ($Self->{Config}->{Note}) {
766
$Self->{LayoutObject}->Block(
770
$Self->{LayoutObject}->Block(
775
if ($Self->{Config}->{InformAgent}) {
777
my %AllGroupsMembers = $Self->{UserObject}->UserList(
781
my $GID = $Self->{QueueObject}->GetQueueGroupID(QueueID => $Ticket{QueueID});
782
my %MemberList = $Self->{GroupObject}->GroupMemberList(
788
foreach (keys %MemberList) {
789
$ShownUsers{$_} = $AllGroupsMembers{$_};
791
$Param{'OptionStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
792
Data => \%ShownUsers,
793
SelectedIDRefArray => $Self->{InformUserID},
794
Name => 'InformUserID',
798
$Self->{LayoutObject}->Block(
799
Name => 'InformAgent',
804
if ($Self->{Config}->{InvolvedAgent}) {
805
my @UserIDs = $Self->{TicketObject}->InvolvedAgents(TicketID => $Self->{TicketID});
808
foreach my $User (reverse @UserIDs) {
810
if (!$UserHash{$User->{UserID}}) {
811
$UserHash{$User->{UserID}} = "$Counter: $User->{UserLastname} ".
812
"$User->{UserFirstname} ($User->{UserLogin})";
815
$Param{'InvolvedAgentStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
817
SelectedIDRefArray => $Self->{InvolvedUserID},
818
Name => 'InvolvedUserID',
822
$Self->{LayoutObject}->Block(
823
Name => 'InvolvedAgent',
828
if ($Self->{ConfigObject}->Get('SpellChecker') && $Self->{LayoutObject}->{BrowserJavaScriptSupport}) {
829
$Self->{LayoutObject}->Block(
830
Name => 'SpellCheck',
835
foreach my $DataRef (@{$Param{Attachments}}) {
836
$Self->{LayoutObject}->Block(
837
Name => 'Attachment',
841
# build ArticleTypeID string
842
my %ArticleType = ();
843
if (!$Param{ArticleTypeID}) {
844
$ArticleType{Selected} = $Self->{Config}->{ArticleTypeDefault};
847
$ArticleType{SelectedID} = $Param{ArticleTypeID};
850
my %DefaultNoteTypes = %{$Self->{Config}->{ArticleTypes}};
851
my %NoteTypes = $Self->{DBObject}->GetTableData(
852
Table => 'article_type',
856
foreach (keys %NoteTypes) {
857
if (!$DefaultNoteTypes{$NoteTypes{$_}}) {
858
delete $NoteTypes{$_};
861
$Param{'ArticleTypeStrg'} = $Self->{LayoutObject}->OptionStrgHashRef(
863
Name => 'ArticleTypeID',
866
$Self->{LayoutObject}->Block(
867
Name => 'ArticleType',
870
# show time accounting box
871
if ($Self->{ConfigObject}->Get('Ticket::Frontend::AccountTime')) {
872
$Self->{LayoutObject}->Block(
873
Name => 'TimeUnitsJs',
876
$Self->{LayoutObject}->Block(
886
if ($Self->{Config}->{'TicketFreeText'}->{$Count}) {
887
$Self->{LayoutObject}->Block(
888
Name => 'TicketFreeText',
890
TicketFreeKeyField => $Param{'TicketFreeKeyField'.$Count},
891
TicketFreeTextField => $Param{'TicketFreeTextField'.$Count},
895
$Self->{LayoutObject}->Block(
896
Name => 'TicketFreeText'.$Count,
907
if ($Self->{Config}->{'TicketFreeTime'}->{$Count}) {
908
$Self->{LayoutObject}->Block(
909
Name => 'TicketFreeTime',
911
TicketFreeTimeKey => $Self->{ConfigObject}->Get('TicketFreeTimeKey'.$Count),
912
TicketFreeTime => $Param{'TicketFreeTime'.$Count},
916
$Self->{LayoutObject}->Block(
917
Name => 'TicketFreeTime'.$Count,
929
if ($Self->{Config}->{'ArticleFreeText'}->{$Count}) {
930
$Self->{LayoutObject}->Block(
931
Name => 'ArticleFreeText',
933
ArticleFreeKeyField => $Param{'ArticleFreeKeyField'.$Count},
934
ArticleFreeTextField => $Param{'ArticleFreeTextField'.$Count},
938
$Self->{LayoutObject}->Block(
939
Name => 'ArticleFreeText'.$Count,
948
return $Self->{LayoutObject}->Output(TemplateFile => 'AgentTicketPriority', Data => \%Param);