# -- # Kernel/Modules/AdminGenericAgent.pm - admin generic agent interface # Copyright (C) 2001-2007 OTRS GmbH, http://otrs.org/ # -- # $Id: AdminGenericAgent.pm,v 1.40.2.1 2007/10/09 22:27:02 martin Exp $ # -- # This software comes with ABSOLUTELY NO WARRANTY. For details, see # the enclosed file COPYING for license information (GPL). If you # did not receive this file, see http://www.gnu.org/licenses/gpl.txt. # -- package Kernel::Modules::AdminGenericAgent; use strict; use warnings; use Kernel::System::Priority; use Kernel::System::Lock; use Kernel::System::Service; use Kernel::System::SLA; use Kernel::System::State; use Kernel::System::Type; use Kernel::System::GenericAgent; use vars qw($VERSION); $VERSION = qw($Revision: 1.40.2.1 $) [1]; sub new { my ( $Type, %Param ) = @_; # allocate new hash for object my $Self = {}; bless( $Self, $Type ); for ( keys %Param ) { $Self->{$_} = $Param{$_}; } # check needed objects for (qw(ParamObject DBObject TicketObject LayoutObject LogObject ConfigObject)) { if ( !$Self->{$_} ) { $Self->{LayoutObject}->FatalError( Message => "Got no $_!" ); } } $Self->{PriorityObject} = Kernel::System::Priority->new(%Param); $Self->{StateObject} = Kernel::System::State->new(%Param); $Self->{LockObject} = Kernel::System::Lock->new(%Param); $Self->{ServiceObject} = Kernel::System::Service->new(%Param); $Self->{SLAObject} = Kernel::System::SLA->new(%Param); $Self->{TypeObject} = Kernel::System::Type->new(%Param); $Self->{GenericAgentObject} = Kernel::System::GenericAgent->new(%Param); return $Self; } sub Run { my ( $Self, %Param ) = @_; my $Output = ''; # get confid data $Self->{Profile} = $Self->{ParamObject}->GetParam( Param => 'Profile' ) || ''; $Self->{OldProfile} = $Self->{ParamObject}->GetParam( Param => 'OldProfile' ) || ''; $Self->{Subaction} = $Self->{ParamObject}->GetParam( Param => 'Subaction' ) || ''; # ---------------------------------------------------------- # # run a generic agent job -> "run now" # ---------------------------------------------------------- # if ( $Self->{Subaction} eq 'RunNow' ) { if ($Self->{GenericAgentObject}->JobRun( Job => $Self->{Profile}, UserID => 1, ) ) { # redirect return $Self->{LayoutObject}->Redirect( OP => "Action=$Self->{Action}", ); } else { # redirect return $Self->{LayoutObject}->ErrorScreen(); } } # ---------------------------------------------------------- # # add a new generic agent job # ---------------------------------------------------------- # if ( $Self->{Subaction} eq 'Add' && $Self->{Profile} ) { # insert new profile params $Self->{GenericAgentObject}->JobAdd( Name => $Self->{Profile}, Data => { ScheduleLastRun => '', }, UserID => $Self->{UserID}, ); # redirect return $Self->{LayoutObject} ->Redirect( OP => "Action=$Self->{Action}&Subaction=Update&Profile=$Self->{Profile}", ); } # --------------------------------------------------------------- # # save generic agent job and show a view of all affected tickets # --------------------------------------------------------------- # # show result site if ( $Self->{Subaction} eq 'UpdateAction' ) { # fill up profile name (e.g. with last-search) if ( !$Self->{Profile} ) { $Output = $Self->{LayoutObject}->Header( Title => 'Error' ); $Output .= $Self->{LayoutObject}->Warning( Message => 'Need Job Name!' ); $Output .= $Self->{LayoutObject}->Footer(); return $Output; } # get single params my %GetParam = (); for ( qw(TicketNumber From To Cc Subject Body CustomerID CustomerUserLogin Agent TimeSearchType TicketCreateTimePointFormat TicketCreateTimePoint TicketCreateTimePointStart TicketCreateTimeStart TicketCreateTimeStartDay TicketCreateTimeStartMonth TicketCreateTimeStartYear TicketCreateTimeStop TicketCreateTimeStopDay TicketCreateTimeStopMonth TicketCreateTimeStopYear TimePendingSearchType TicketPendingTimePointFormat TicketPendingTimePoint TicketPendingTimePointStart TicketPendingTimeStart TicketPendingTimeStartDay TicketPendingTimeStartMonth TicketPendingTimeStartYear TicketPendingTimeStop TicketPendingTimeStopDay TicketPendingTimeStopMonth TicketPendingTimeStopYear NewCustomerID NewCustomerUserLogin NewStateID NewQueueID NewPriorityID NewOwnerID NewTypeID NewServiceID NewSLAID NewNoteFrom NewNoteSubject NewNoteBody NewModule NewParamKey1 NewParamKey2 NewParamKey3 NewParamKey4 NewParamValue1 NewParamValue2 NewParamValue3 NewParamValue4 NewParamKey5 NewParamKey6 NewParamKey7 NewParamKey8 NewParamValue5 NewParamValue6 NewParamValue7 NewParamValue8 NewLockID NewDelete NewCMD NewSendNoNotification ScheduleLastRun Valid ) ) { $GetParam{$_} = $Self->{ParamObject}->GetParam( Param => $_ ); # remove white space on the end if ( $GetParam{$_} ) { $GetParam{$_} =~ s/\s+$//g; $GetParam{$_} =~ s/^\s+//g; } } # get new free field params for my $ID ( 1 .. 16 ) { # ticket free keys if ( defined( $Self->{ParamObject}->GetParam( Param => "NewTicketFreeKey$ID" ) ) ) { $GetParam{"NewTicketFreeKey$ID"} = $Self->{ParamObject}->GetParam( Param => "NewTicketFreeKey" . $ID ); # remove white space on the end if ( $GetParam{"NewTicketFreeKey$ID"} ) { $GetParam{"NewTicketFreeKey$ID"} =~ s/\s+$//g; $GetParam{"NewTicketFreeKey$ID"} =~ s/^\s+//g; } } # ticket free text if ($Self->{ParamObject}->GetParam( Param => "NewTicketFreeText$ID" ) || ( defined( $Self->{ParamObject}->GetParam( Param => "NewTicketFreeText$ID" ) ) && $Self->{ConfigObject}->Get("TicketFreeText$ID") ) ) { $GetParam{"NewTicketFreeText$ID"} = $Self->{ParamObject}->GetParam( Param => "NewTicketFreeText$ID" ); # remove white space on the end if ( $GetParam{"NewTicketFreeText$ID"} ) { $GetParam{"NewTicketFreeText$ID"} =~ s/\s+$//g; $GetParam{"NewTicketFreeText$ID"} =~ s/^\s+//g; } } } # get array params for ( qw(LockIDs StateIDs StateTypeIDs QueueIDs PriorityIDs OwnerIDs TypeIDs ServiceIDs SLAIDs ScheduleDays ScheduleMinutes ScheduleHours ) ) { # get search array params (get submitted params) if ( $Self->{ParamObject}->GetArray( Param => $_ ) ) { @{ $GetParam{$_} } = $Self->{ParamObject}->GetArray( Param => $_ ); } } # get free field params for my $ID ( 1 .. 16 ) { # get search array params for free key (get submitted params) if ( $Self->{ParamObject}->GetArray( Param => "TicketFreeKey$ID" ) ) { @{ $GetParam{"TicketFreeKey$ID"} } = $Self->{ParamObject}->GetArray( Param => "TicketFreeKey$ID" ); } # get search array params for free text (get submitted params) if ( $Self->{ConfigObject}->Get("TicketFreeText$ID") ) { if ( $Self->{ParamObject}->GetArray( Param => "TicketFreeText$ID" ) ) { @{ $GetParam{"TicketFreeText$ID"} } = $Self->{ParamObject}->GetArray( Param => "TicketFreeText$ID" ); } } else { my @Array = $Self->{ParamObject}->GetArray( Param => "TicketFreeText$ID" ); if ( $Array[0] ) { @{ $GetParam{"TicketFreeText$ID"} } = @Array; } } } # remove/clean up old profile stuff $Self->{GenericAgentObject}->JobDelete( Name => $Self->{OldProfile}, UserID => $Self->{UserID}, ); # insert new profile params $Self->{GenericAgentObject}->JobAdd( Name => $Self->{Profile}, Data => \%GetParam, UserID => $Self->{UserID}, ); # get time settings if ( !$GetParam{TimeSearchType} || $GetParam{TimeSearchType} eq 'None' ) { # do noting on time stuff } elsif ( $GetParam{TimeSearchType} eq 'TimeSlot' ) { for (qw(Month Day)) { if ( $GetParam{"TicketCreateTimeStart$_"} <= 9 ) { $GetParam{"TicketCreateTimeStart$_"} = '0' . $GetParam{"TicketCreateTimeStart$_"}; } } for (qw(Month Day)) { if ( $GetParam{"TicketCreateTimeStop$_"} <= 9 ) { $GetParam{"TicketCreateTimeStop$_"} = '0' . $GetParam{"TicketCreateTimeStop$_"}; } } if ( $GetParam{TicketCreateTimeStartDay} && $GetParam{TicketCreateTimeStartMonth} && $GetParam{TicketCreateTimeStartYear} ) { $GetParam{TicketCreateTimeNewerDate} = $GetParam{TicketCreateTimeStartYear} . '-' . $GetParam{TicketCreateTimeStartMonth} . '-' . $GetParam{TicketCreateTimeStartDay} . ' 00:00:01'; } if ( $GetParam{TicketCreateTimeStopDay} && $GetParam{TicketCreateTimeStopMonth} && $GetParam{TicketCreateTimeStopYear} ) { $GetParam{TicketCreateTimeOlderDate} = $GetParam{TicketCreateTimeStopYear} . '-' . $GetParam{TicketCreateTimeStopMonth} . '-' . $GetParam{TicketCreateTimeStopDay} . ' 23:59:59'; } } elsif ( $GetParam{TimeSearchType} eq 'TimePoint' ) { if ( $GetParam{TicketCreateTimePoint} && $GetParam{TicketCreateTimePointStart} && $GetParam{TicketCreateTimePointFormat} ) { my $Time = 0; if ( $GetParam{TicketCreateTimePointFormat} eq 'minute' ) { $Time = $GetParam{TicketCreateTimePoint}; } elsif ( $GetParam{TicketCreateTimePointFormat} eq 'hour' ) { $Time = $GetParam{TicketCreateTimePoint} * 60; } elsif ( $GetParam{TicketCreateTimePointFormat} eq 'day' ) { $Time = $GetParam{TicketCreateTimePoint} * 60 * 24; } elsif ( $GetParam{TicketCreateTimePointFormat} eq 'week' ) { $Time = $GetParam{TicketCreateTimePoint} * 60 * 24 * 7; } elsif ( $GetParam{TicketCreateTimePointFormat} eq 'month' ) { $Time = $GetParam{TicketCreateTimePoint} * 60 * 24 * 30; } elsif ( $GetParam{TicketCreateTimePointFormat} eq 'year' ) { $Time = $GetParam{TicketCreateTimePoint} * 60 * 24 * 365; } if ( $GetParam{TicketCreateTimePointStart} eq 'Before' ) { $GetParam{TicketCreateTimeOlderMinutes} = $Time; } else { $GetParam{TicketCreateTimeNewerMinutes} = $Time; } } } # get time settings if ( !$GetParam{TimePendingSearchType} || $GetParam{TimePendingSearchType} eq 'None' ) { # do noting on time stuff } elsif ( $GetParam{TimePendingSearchType} eq 'TimeSlot' ) { for (qw(Month Day)) { if ( $GetParam{"TicketPendingTimeStart$_"} <= 9 ) { $GetParam{"TicketPendingTimeStart$_"} = '0' . $GetParam{"TicketPendingTimeStart$_"}; } } for (qw(Month Day)) { if ( $GetParam{"TicketPendingTimeStop$_"} <= 9 ) { $GetParam{"TicketPendingTimeStop$_"} = '0' . $GetParam{"TicketPendingTimeStop$_"}; } } if ( $GetParam{TicketPendingTimeStartDay} && $GetParam{TicketPendingTimeStartMonth} && $GetParam{TicketPendingTimeStartYear} ) { $GetParam{TicketPendingTimeNewerDate} = $GetParam{TicketPendingTimeStartYear} . '-' . $GetParam{TicketPendingTimeStartMonth} . '-' . $GetParam{TicketPendingTimeStartDay} . ' 00:00:01'; } if ( $GetParam{TicketPendingTimeStopDay} && $GetParam{TicketPendingTimeStopMonth} && $GetParam{TicketPendingTimeStopYear} ) { $GetParam{TicketPendingTimeOlderDate} = $GetParam{TicketPendingTimeStopYear} . '-' . $GetParam{TicketPendingTimeStopMonth} . '-' . $GetParam{TicketPendingTimeStopDay} . ' 23:59:59'; } } elsif ( $GetParam{TimePendingSearchType} eq 'TimePoint' ) { if ( $GetParam{TicketPendingTimePoint} && $GetParam{TicketPendingTimePointStart} && $GetParam{TicketPendingTimePointFormat} ) { my $Time = 0; if ( $GetParam{TicketPendingTimePointFormat} eq 'minute' ) { $Time = $GetParam{TicketPendingTimePoint}; } elsif ( $GetParam{TicketPendingTimePointFormat} eq 'hour' ) { $Time = $GetParam{TicketPendingTimePoint} * 60; } elsif ( $GetParam{TicketPendingTimePointFormat} eq 'day' ) { $Time = $GetParam{TicketPendingTimePoint} * 60 * 24; } elsif ( $GetParam{TicketPendingTimePointFormat} eq 'week' ) { $Time = $GetParam{TicketPendingTimePoint} * 60 * 24 * 7; } elsif ( $GetParam{TicketPendingTimePointFormat} eq 'month' ) { $Time = $GetParam{TicketPendingTimePoint} * 60 * 24 * 30; } elsif ( $GetParam{TicketPendingTimePointFormat} eq 'year' ) { $Time = $GetParam{TicketPendingTimePoint} * 60 * 24 * 365; } if ( $GetParam{TicketPendingTimePointStart} eq 'Before' ) { $GetParam{TicketPendingTimeOlderMinutes} = $Time; } else { $GetParam{TicketPendingTimeNewerMinutes} = $Time; } } } # focus of "From To Cc Subject Body" for (qw(From To Cc Subject Body)) { if ( defined( $GetParam{$_} ) && $GetParam{$_} ne '' ) { $GetParam{$_} = "$GetParam{$_}"; } } # perform ticket search my $Counter = 0; my @ViewableIDs = $Self->{TicketObject}->TicketSearch( Result => 'ARRAY', SortBy => 'Age', OrderBy => 'Down', UserID => 1, %GetParam, ); if ( $GetParam{NewDelete} ) { $Param{DeleteMessage} = 'You use the DELETE option! Take care, all deleted Tickets are lost!!!'; } if (@ViewableIDs) { $Param{AffectedIDs} = $#ViewableIDs + 1; } else { $Param{AffectedIDs} = 0; } $Self->{LayoutObject}->Block( Name => 'Result', Data => { %Param, Name => $Self->{Profile}, }, ); if ( $ViewableIDs[0] ) { $Self->{LayoutObject}->Block( Name => 'ResultBlock', ); for ( 0 .. $#ViewableIDs ) { # get first article data my %Data = $Self->{TicketObject}->ArticleFirstArticle( TicketID => $ViewableIDs[$_] ); $Data{Age} = $Self->{LayoutObject}->CustomerAge( Age => $Data{Age}, Space => ' ' ); $Data{css} = "PriorityID-$Data{PriorityID}"; # user info my %UserInfo = $Self->{UserObject}->GetUserData( User => $Data{Owner}, Cached => 1 ); $Data{UserLastname} = $UserInfo{UserLastname}; $Data{UserFirstname} = $UserInfo{UserFirstname}; $Self->{LayoutObject}->Block( Name => 'Ticket', Data => \%Data, ); # just show 25 tickts if ( $_ > 25 ) { last; } } } # html search mask output $Output = $Self->{LayoutObject}->Header( Title => "Affected Tickets" ); $Output .= $Self->{LayoutObject}->NavigationBar(); $Output .= $Self->{LayoutObject}->Output( TemplateFile => 'AdminGenericAgent', Data => \%Param, ); # build footer $Output .= $Self->{LayoutObject}->Footer(); return $Output; } # ---------------------------------------------------------- # # edit generic agent job # ---------------------------------------------------------- # if ( $Self->{Subaction} eq 'Update' && $Self->{Profile} ) { # get db job data my %Param = $Self->{GenericAgentObject}->JobGet( Name => $Self->{Profile} ); $Param{Profile} = $Self->{Profile}; my %ShownUsers = $Self->{UserObject}->UserList( Type => 'Long', Valid => 1, ); $Param{'OwnerStrg'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => \%ShownUsers, Name => 'OwnerIDs', Multiple => 1, Size => 5, SelectedIDRefArray => $Param{OwnerIDs}, ); $Param{'NewOwnerStrg'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => \%ShownUsers, Name => 'NewOwnerID', Size => 5, Multiple => 1, SelectedID => $Param{NewOwnerID}, ); my %Hours = (); for ( 0 .. 23 ) { $Hours{$_} = sprintf( "%02d", $_ ); } $Param{'ScheduleHours'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => \%Hours, Name => 'ScheduleHours', Size => 6, Multiple => 1, SelectedIDRefArray => $Param{ScheduleHours}, ); $Param{'ScheduleMinutes'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => { '00' => '00', 10 => '10', 20 => '20', 30 => '30', 40 => '40', 50 => '50', }, Name => 'ScheduleMinutes', Size => 6, Multiple => 1, SelectedIDRefArray => $Param{ScheduleMinutes}, ); $Param{'ScheduleDays'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => { 1 => 'Mon', 2 => 'Tue', 3 => 'Wed', 4 => 'Thu', 5 => 'Fri', 6 => 'Sat', 0 => 'Sun', }, SortBy => 'Key', Name => 'ScheduleDays', Size => 6, Multiple => 1, SelectedIDRefArray => $Param{ScheduleDays}, ); $Param{'StatesStrg'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => { $Self->{StateObject}->StateList( UserID => 1, Action => $Self->{Action}, ), }, Name => 'StateIDs', Multiple => 1, Size => 5, SelectedIDRefArray => $Param{StateIDs}, ); $Param{'NewStatesStrg'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => { $Self->{StateObject}->StateList( UserID => 1, Action => $Self->{Action}, ), }, Name => 'NewStateID', Size => 5, Multiple => 1, SelectedID => $Param{NewStateID}, ); $Param{'QueuesStrg'} = $Self->{LayoutObject}->AgentQueueListOption( Data => { $Self->{QueueObject}->GetAllQueues(), }, Size => 5, Multiple => 1, Name => 'QueueIDs', SelectedIDRefArray => $Param{QueueIDs}, OnChangeSubmit => 0, ); $Param{'NewQueuesStrg'} = $Self->{LayoutObject}->AgentQueueListOption( Data => { $Self->{QueueObject}->GetAllQueues(), }, Size => 5, Multiple => 1, Name => 'NewQueueID', SelectedID => $Param{NewQueueID}, OnChangeSubmit => 0, ); $Param{'PrioritiesStrg'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => { $Self->{PriorityObject}->PriorityList( UserID => 1, Action => $Self->{Action}, ), }, Name => 'PriorityIDs', Multiple => 1, Size => 5, SelectedIDRefArray => $Param{PriorityIDs}, ); $Param{'NewPrioritiesStrg'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => { $Self->{PriorityObject}->PriorityList( UserID => 1, Action => $Self->{Action}, ), }, Name => 'NewPriorityID', Multiple => 1, Size => 5, SelectedID => $Param{NewPriorityID}, ); # get create time option if ( !$Param{TimeSearchType} ) { $Param{'TimeSearchType::None'} = 'checked'; } elsif ( $Param{TimeSearchType} eq 'TimePoint' ) { $Param{'TimeSearchType::TimePoint'} = 'checked'; } elsif ( $Param{TimeSearchType} eq 'TimeSlot' ) { $Param{'TimeSearchType::TimeSlot'} = 'checked'; } # get pending time option if ( !$Param{TimePendingSearchType} ) { $Param{'TimePendingSearchType::None'} = 'checked'; } elsif ( $Param{TimePendingSearchType} eq 'TimePoint' ) { $Param{'TimePendingSearchType::TimePoint'} = 'checked'; } elsif ( $Param{TimePendingSearchType} eq 'TimeSlot' ) { $Param{'TimePendingSearchType::TimeSlot'} = 'checked'; } my %Counter = (); for ( 1 .. 60 ) { $Counter{$_} = sprintf( "%02d", $_ ); } # create time $Param{'TicketCreateTimePoint'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => \%Counter, Name => 'TicketCreateTimePoint', SelectedID => $Param{TicketCreateTimePoint}, ); $Param{'TicketCreateTimePointStart'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => { 'Last' => 'last', 'Before' => 'before', }, Name => 'TicketCreateTimePointStart', SelectedID => $Param{TicketCreateTimePointStart} || 'Last', ); $Param{'TicketCreateTimePointFormat'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => { minute => 'minute(s)', hour => 'hour(s)', day => 'day(s)', week => 'week(s)', month => 'month(s)', year => 'year(s)', }, Name => 'TicketCreateTimePointFormat', SelectedID => $Param{TicketCreateTimePointFormat}, ); $Param{TicketCreateTimeStart} = $Self->{LayoutObject}->BuildDateSelection( %Param, Prefix => 'TicketCreateTimeStart', Format => 'DateInputFormat', DiffTime => -( ( 60 * 60 * 24 ) * 30 ), ); $Param{TicketCreateTimeStop} = $Self->{LayoutObject}->BuildDateSelection( %Param, Prefix => 'TicketCreateTimeStop', Format => 'DateInputFormat', ); # pending time $Param{'TicketPendingTimePoint'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => \%Counter, Name => 'TicketPendingTimePoint', SelectedID => $Param{TicketPendingTimePoint}, ); $Param{'TicketPendingTimePointStart'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => { 'Last' => 'last', 'Before' => 'before', }, Name => 'TicketPendingTimePointStart', SelectedID => $Param{TicketPendingTimePointStart} || 'Last', ); $Param{'TicketPendingTimePointFormat'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => { minute => 'minute(s)', hour => 'hour(s)', day => 'day(s)', week => 'week(s)', month => 'month(s)', year => 'year(s)', }, Name => 'TicketPendingTimePointFormat', SelectedID => $Param{TicketPendingTimePointFormat}, ); $Param{TicketPendingTimeStart} = $Self->{LayoutObject}->BuildDateSelection( %Param, Prefix => 'TicketPendingTimeStart', Format => 'DateInputFormat', DiffTime => -( ( 60 * 60 * 24 ) * 30 ), ); $Param{TicketPendingTimeStop} = $Self->{LayoutObject}->BuildDateSelection( %Param, Prefix => 'TicketPendingTimeStop', Format => 'DateInputFormat', ); $Param{'DeleteOption'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => $Self->{ConfigObject}->Get('YesNoOptions'), Name => 'NewDelete', SelectedID => $Param{NewDelete}, ); $Param{'ValidOption'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => $Self->{ConfigObject}->Get('YesNoOptions'), Name => 'Valid', SelectedID => defined( $Param{Valid} ) ? $Param{Valid} : 1, ); $Param{'LockOption'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => { $Self->{LockObject}->LockList( UserID => 1, Action => $Self->{Action}, ), }, Name => 'LockIDs', Multiple => 1, Size => 3, SelectedIDRefArray => $Param{LockIDs}, ); $Param{'NewLockOption'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => { $Self->{LockObject}->LockList( UserID => 1, Action => $Self->{Action}, ), }, Name => 'NewLockID', Size => 3, Multiple => 1, SelectedID => $Param{NewLockID}, ); $Param{'SendNoNotificationOption'} = $Self->{LayoutObject}->OptionStrgHashRef( Data => $Self->{ConfigObject}->Get('YesNoOptions'), Name => 'NewSendNoNotification', SelectedID => $Param{NewSendNoNotification} || 0, ); $Self->{LayoutObject}->Block( Name => 'Edit', Data => \%Param, ); # build type string if ( $Self->{ConfigObject}->Get('Ticket::Type') ) { my %Type = $Self->{TypeObject}->TypeList( UserID => $Self->{UserID}, ); $Param{'TypesStrg'} = $Self->{LayoutObject}->BuildSelection( Data => \%Type, Name => 'TypeIDs', SelectedID => $Param{TypeIDs}, Sort => 'AlphanumericValue', Size => 3, Multiple => 1, Translation => 0, ); $Self->{LayoutObject}->Block( Name => 'TicketType', Data => {%Param}, ); $Param{'NewTypesStrg'} = $Self->{LayoutObject}->BuildSelection( Data => \%Type, Name => 'NewTypeID', SelectedID => $Param{NewTypeID}, Sort => 'AlphanumericValue', Size => 3, Multiple => 1, Translation => 0, ); $Self->{LayoutObject}->Block( Name => 'NewTicketType', Data => {%Param}, ); } # build service string if ( $Self->{ConfigObject}->Get('Ticket::Service') ) { # get list type my $TreeView = 0; if ( $Self->{ConfigObject}->Get('Ticket::Frontend::ListType') eq 'tree' ) { $TreeView = 1; } my %Service = $Self->{ServiceObject}->ServiceList( UserID => $Self->{UserID}, ); $Param{'ServicesStrg'} = $Self->{LayoutObject}->BuildSelection( Data => \%Service, Name => 'ServiceIDs', SelectedID => $Param{ServiceIDs}, TreeView => $TreeView, Sort => 'TreeView', Size => 5, Multiple => 1, Translation => 0, ); $Param{'NewServicesStrg'} = $Self->{LayoutObject}->BuildSelection( Data => \%Service, Name => 'NewServiceID', SelectedID => $Param{NewServiceID}, TreeView => $TreeView, Sort => 'TreeView', Size => 5, Multiple => 1, Translation => 0, ); my %SLA = $Self->{SLAObject}->SLAList( UserID => $Self->{UserID}, ); $Param{'SLAsStrg'} = $Self->{LayoutObject}->BuildSelection( Data => \%SLA, Name => 'SLAIDs', SelectedID => $Param{SLAIDs}, Sort => 'AlphanumericValue', Size => 5, Multiple => 1, Translation => 0, ); $Param{'NewSLAsStrg'} = $Self->{LayoutObject}->BuildSelection( Data => \%SLA, Name => 'NewSLAID', SelectedID => $Param{NewSLAID}, Sort => 'AlphanumericValue', Size => 5, Multiple => 1, Translation => 0, ); $Self->{LayoutObject}->Block( Name => 'TicketService', Data => {%Param}, ); $Self->{LayoutObject}->Block( Name => 'NewTicketService', Data => {%Param}, ); } # Free field settings my $Flag = 1; for my $ID ( 1 .. 16 ) { if ( ref( $Self->{ConfigObject}->Get( 'TicketFreeKey' . $ID ) ) eq 'HASH' ) { # $Flag to show the whole freefield block if ($Flag) { $Self->{LayoutObject}->Block( Name => 'TicketFreeField' ); $Flag = 0; } # generate free key my %TicketFreeKey = %{ $Self->{ConfigObject}->Get( 'TicketFreeKey' . $ID ) }; my @FreeKey = keys %TicketFreeKey; my $TicketFreeKey = ''; if ( $#FreeKey == 0 ) { $TicketFreeKey = $TicketFreeKey{ $FreeKey[0] }; } else { $TicketFreeKey = $Self->{LayoutObject}->OptionStrgHashRef( Data => \%TicketFreeKey, Name => 'TicketFreeKey' . $ID, Size => 4, Multiple => 1, LanguageTranslation => 0, SelectedIDRefArray => $Param{ 'TicketFreeKey' . $ID }, ); } # generate free text my $TicketFreeText = ''; if ( !$Self->{ConfigObject}->Get( 'TicketFreeText' . $ID ) ) { $TicketFreeText = ''; } else { my %TicketFreeText = %{ $Self->{ConfigObject}->Get( 'TicketFreeText' . $ID ) }; $TicketFreeText = $Self->{LayoutObject}->OptionStrgHashRef( Data => \%TicketFreeText, Name => 'TicketFreeText' . $ID, Size => 4, Multiple => 1, LanguageTranslation => 0, SelectedIDRefArray => $Param{ 'TicketFreeText' . $ID }, ); } $Self->{LayoutObject}->Block( Name => 'TicketFreeFieldElement', Data => { TicketFreeKey => $TicketFreeKey, TicketFreeText => $TicketFreeText, }, ); } } # New free field settings $Flag = 1; for my $ID ( 1 .. 16 ) { if ( ref( $Self->{ConfigObject}->Get( 'TicketFreeKey' . $ID ) ) eq 'HASH' ) { # $Falg to shcw the hole freefield block if ($Flag) { $Self->{LayoutObject}->Block( Name => 'NewTicketFreeField', ); $Flag = 0; } # generate free key my %TicketFreeKey = %{ $Self->{ConfigObject}->Get( 'TicketFreeKey' . $ID ) }; my @FreeKey = keys %TicketFreeKey; my $NewTicketFreeKey = ''; if ( $#FreeKey == 0 ) { $NewTicketFreeKey = $TicketFreeKey{ $FreeKey[0] }; } else { $NewTicketFreeKey = $Self->{LayoutObject}->OptionStrgHashRef( Data => \%TicketFreeKey, Name => 'NewTicketFreeKey' . $ID, Size => 4, Multiple => 1, LanguageTranslation => 0, SelectedID => $Param{ 'NewTicketFreeKey' . $ID }, ); } # generate free text my $NewTicketFreeText = ''; if ( !$Self->{ConfigObject}->Get( 'TicketFreeText' . $ID ) ) { $NewTicketFreeText = ''; } else { my %TicketFreeText = %{ $Self->{ConfigObject}->Get( 'TicketFreeText' . $ID ) }; $NewTicketFreeText = $Self->{LayoutObject}->OptionStrgHashRef( Data => \%TicketFreeText, Name => 'NewTicketFreeText' . $ID, Size => 4, Multiple => 1, LanguageTranslation => 0, SelectedID => $Param{ 'NewTicketFreeText' . $ID }, ); } $Self->{LayoutObject}->Block( Name => 'NewTicketFreeFieldElement', Data => { NewTicketFreeKey => $NewTicketFreeKey, NewTicketFreeText => $NewTicketFreeText, }, ); } } # generate search mask my $Output = $Self->{LayoutObject}->Header( Title => "Edit" ); $Output .= $Self->{LayoutObject}->NavigationBar(); $Output .= $Self->{LayoutObject}->Output( TemplateFile => 'AdminGenericAgent', Data => \%Param, ); $Output .= $Self->{LayoutObject}->Footer(); return $Output; } # ---------------------------------------------------------- # # delete an generic agent job # ---------------------------------------------------------- # if ( $Self->{Subaction} eq 'Delete' && $Self->{Profile} ) { if ( $Self->{Profile} ) { $Self->{GenericAgentObject}->JobDelete( Name => $Self->{Profile}, UserID => $Self->{UserID}, ); } } # ---------------------------------------------------------- # # overview of all generic agent jobs # ---------------------------------------------------------- # $Self->{LayoutObject}->Block( Name => 'Overview', ); my %Jobs = $Self->{GenericAgentObject}->JobList(); my $Counter = 1; for ( sort keys %Jobs ) { my %JobData = $Self->{GenericAgentObject}->JobGet( Name => $_ ); # css setting and text for valid or invalid jobs if ( $JobData{Valid} ) { $JobData{ShownValid} = "valid"; $JobData{cssValid} = ""; } else { $JobData{ShownValid} = "invalid"; $JobData{cssValid} = "contentvaluepassiv"; } # seperate each searchresult line by using several css $Counter++; if ( $Counter % 2 ) { $JobData{css} = "searchpassive"; } else { $JobData{css} = "searchactive"; } $Self->{LayoutObject}->Block( Name => 'Row', Data => {%JobData}, ); } # generate search mask $Output = $Self->{LayoutObject}->Header( Title => "Overview" ); $Output .= $Self->{LayoutObject}->NavigationBar(); $Output .= $Self->{LayoutObject}->Output( TemplateFile => 'AdminGenericAgent', Data => \%Param, ); $Output .= $Self->{LayoutObject}->Footer(); return $Output; } 1;