This commit is contained in:
2024-10-14 00:08:40 +02:00
parent dbfba56f66
commit 1462d52e13
4572 changed files with 2658864 additions and 0 deletions

View File

@@ -0,0 +1,504 @@
# --
# Copyright (C) 2001-2016 OTRS AG, http://otrs.com/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (AGPL). If you
# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
# --
package Kernel::Modules::AdminSLA;
use strict;
use warnings;
our $ObjectManagerDisabled = 1;
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {%Param};
bless( $Self, $Type );
return $Self;
}
sub Run {
my ( $Self, %Param ) = @_;
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
my $ConfigObject = $Kernel::OM->Get('Kernel::Config');
my $SLAObject = $Kernel::OM->Get('Kernel::System::SLA');
my %Error = ();
# ------------------------------------------------------------ #
# sla edit
# ------------------------------------------------------------ #
if ( $Self->{Subaction} eq 'SLAEdit' ) {
# header
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
# html output
$Output .= $Self->_MaskNew(
%Param,
);
$Output .= $LayoutObject->Footer();
return $Output;
}
# ------------------------------------------------------------ #
# sla save
# ------------------------------------------------------------ #
elsif ( $Self->{Subaction} eq 'SLASave' ) {
# challenge token check for write action
$LayoutObject->ChallengeTokenCheck();
# get params
my %GetParam;
for my $Param (
qw(SLAID Name Calendar FirstResponseTime FirstResponseNotify SolutionTime SolutionNotify UpdateTime UpdateNotify ValidID Comment)
)
{
$GetParam{$Param} = $ParamObject->GetParam( Param => $Param ) || '';
}
# check needed stuff
%Error = ();
if ( !$GetParam{Name} ) {
$Error{'NameInvalid'} = 'ServerError';
}
my $LogObject = $Kernel::OM->Get('Kernel::System::Log');
# if no errors occurred
if ( !%Error ) {
# get service ids
my @ServiceIDs = $ParamObject->GetArray( Param => 'ServiceIDs' );
$GetParam{ServiceIDs} = \@ServiceIDs;
# save to database
if ( !$GetParam{SLAID} ) {
# add a new sla
$GetParam{SLAID} = $SLAObject->SLAAdd(
%GetParam,
UserID => $Self->{UserID},
);
if ( !$GetParam{SLAID} ) {
$Error{Message} = $LogObject->GetLogEntry(
Type => 'Error',
What => 'Message',
);
}
}
else {
# update the sla
my $Success = $SLAObject->SLAUpdate(
%GetParam,
UserID => $Self->{UserID},
);
if ( !$Success ) {
$Error{Message} = $LogObject->GetLogEntry(
Type => 'Error',
What => 'Message',
);
}
}
if ( !%Error ) {
# update preferences
my %SLAData = $SLAObject->SLAGet(
SLAID => $GetParam{SLAID},
UserID => $Self->{UserID},
);
my %Preferences = ();
if ( $ConfigObject->Get('SLAPreferences') ) {
%Preferences = %{ $ConfigObject->Get('SLAPreferences') };
}
for my $Item ( sort keys %Preferences ) {
my $Module = $Preferences{$Item}->{Module}
|| 'Kernel::Output::HTML::SLAPreferences::Generic';
# load module
if ( !$Kernel::OM->Get('Kernel::System::Main')->Require($Module) ) {
return $LayoutObject->FatalError();
}
my $Object = $Module->new(
%{$Self},
ConfigItem => $Preferences{$Item},
Debug => $Self->{Debug},
);
my $Note;
my @Params = $Object->Param( SLAData => \%SLAData );
if (@Params) {
my %GetParam = ();
for my $ParamItem (@Params) {
my @Array = $ParamObject->GetArray( Param => $ParamItem->{Name} );
$GetParam{ $ParamItem->{Name} } = \@Array;
}
if (
!$Object->Run(
GetParam => \%GetParam,
SLAData => \%SLAData
)
)
{
$Note .= $LayoutObject->Notify( Info => $Object->Error() );
}
}
}
return $LayoutObject->Redirect( OP => "Action=$Self->{Action}" );
}
}
# header
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
$Output .= $Error{Message}
? $LayoutObject->Notify(
Priority => 'Error',
Info => $Error{Message},
)
: '';
# html output
$Output .= $Self->_MaskNew(
%Param,
%GetParam,
%Error,
);
$Output .= $LayoutObject->Footer();
return $Output;
}
# ------------------------------------------------------------ #
# sla overview
# ------------------------------------------------------------ #
else {
# output header
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
# check if service is enabled to use it here
if ( !$ConfigObject->Get('Ticket::Service') ) {
$Output .= $LayoutObject->Notify(
Priority => 'Error',
Data => $LayoutObject->{LanguageObject}->Translate( "Please activate %s first!", "Service" ),
Link =>
$LayoutObject->{Baselink}
. 'Action=AdminSysConfig;Subaction=Edit;SysConfigGroup=Ticket;SysConfigSubGroup=Core::Ticket#Ticket::Service',
);
}
# output overview
$LayoutObject->Block(
Name => 'Overview',
Data => {
%Param,
},
);
$LayoutObject->Block( Name => 'ActionList' );
$LayoutObject->Block( Name => 'ActionAdd' );
# output overview result
$LayoutObject->Block(
Name => 'OverviewList',
Data => {
%Param,
},
);
# get service list
my %ServiceList = $Kernel::OM->Get('Kernel::System::Service')->ServiceList(
Valid => 0,
UserID => $Self->{UserID},
);
# get valid list
my %ValidList = $Kernel::OM->Get('Kernel::System::Valid')->ValidList();
# get sla list
my %SLAList = $SLAObject->SLAList(
Valid => 0,
UserID => $Self->{UserID},
);
# if there are any SLA's defined, they are shown
if (%SLAList) {
SLAID:
for my $SLAID ( sort { lc $SLAList{$a} cmp lc $SLAList{$b} } keys %SLAList ) {
# get the sla data
my %SLAData = $SLAObject->SLAGet(
SLAID => $SLAID,
UserID => $Self->{UserID},
);
# build the service list
my @ServiceList;
for my $ServiceID (
sort { lc $ServiceList{$a} cmp lc $ServiceList{$b} }
@{ $SLAData{ServiceIDs} }
)
{
push @ServiceList, $ServiceList{$ServiceID} || '-';
}
# output overview list row
$LayoutObject->Block(
Name => 'OverviewListRow',
Data => {
%SLAData,
Service => $ServiceList[0] || '-',
Valid => $ValidList{ $SLAData{ValidID} },
},
);
next SLAID if scalar @ServiceList <= 1;
# remove the first service id
shift @ServiceList;
for my $ServiceName (@ServiceList) {
# output overview list row
$LayoutObject->Block(
Name => 'OverviewListRow',
Data => {
Service => $ServiceName,
},
);
}
}
}
# otherwise a no data found msg is displayed
else {
$LayoutObject->Block(
Name => 'NoDataFoundMsg',
Data => {},
);
}
# generate output
$Output .= $LayoutObject->Output(
TemplateFile => 'AdminSLA',
Data => \%Param,
);
$Output .= $LayoutObject->Footer();
return $Output;
}
}
sub _MaskNew {
my ( $Self, %Param ) = @_;
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
# get params
my %SLAData;
$SLAData{SLAID} = $ParamObject->GetParam( Param => 'SLAID' ) || '';
if ( $SLAData{SLAID} ) {
# get sla data
%SLAData = $Kernel::OM->Get('Kernel::System::SLA')->SLAGet(
SLAID => $SLAData{SLAID},
UserID => $Self->{UserID},
);
}
else {
$SLAData{ServiceID} = $ParamObject->GetParam( Param => 'ServiceID' );
}
my $ConfigObject = $Kernel::OM->Get('Kernel::Config');
# get list type
my $ListType = $ConfigObject->Get('Ticket::Frontend::ListType');
# get service list
my %ServiceList = $Kernel::OM->Get('Kernel::System::Service')->ServiceList(
Valid => 1,
KeepChildren => $ConfigObject->Get('Ticket::Service::KeepChildren') // 0,
UserID => $Self->{UserID},
);
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
# generate ServiceOptionStrg
$Param{ServiceOptionStrg} = $LayoutObject->BuildSelection(
Data => \%ServiceList,
Name => 'ServiceIDs',
SelectedID => $SLAData{ServiceIDs} || [],
Multiple => 1,
Size => 5,
Translation => 0,
TreeView => ( $ListType eq 'tree' ) ? 1 : 0,
Max => 200,
Class => 'Modernize',
);
# generate CalendarOptionStrg
my %CalendarList;
my $Maximum = $ConfigObject->Get("MaximumCalendarNumber") || 50;
for my $CalendarNumber ( '', 1 .. $Maximum ) {
if ( $ConfigObject->Get("TimeVacationDays::Calendar$CalendarNumber") ) {
$CalendarList{$CalendarNumber} = "Calendar $CalendarNumber - "
. $ConfigObject->Get( "TimeZone::Calendar" . $CalendarNumber . "Name" );
}
}
$SLAData{CalendarOptionStrg} = $LayoutObject->BuildSelection(
Data => \%CalendarList,
Name => 'Calendar',
SelectedID => $Param{Calendar} || $SLAData{Calendar},
Translation => 0,
PossibleNone => 1,
Class => 'Modernize',
);
my %NotifyLevelList = (
10 => '10%',
20 => '20%',
30 => '30%',
40 => '40%',
50 => '50%',
60 => '60%',
70 => '70%',
80 => '80%',
90 => '90%',
);
$SLAData{FirstResponseNotifyOptionStrg} = $LayoutObject->BuildSelection(
Data => \%NotifyLevelList,
Name => 'FirstResponseNotify',
SelectedID => $Param{FirstResponseNotify} || $SLAData{FirstResponseNotify},
Translation => 0,
PossibleNone => 1,
);
$SLAData{UpdateNotifyOptionStrg} = $LayoutObject->BuildSelection(
Data => \%NotifyLevelList,
Name => 'UpdateNotify',
SelectedID => $Param{UpdateNotify} || $SLAData{UpdateNotify},
Translation => 0,
PossibleNone => 1,
);
$SLAData{SolutionNotifyOptionStrg} = $LayoutObject->BuildSelection(
Data => \%NotifyLevelList,
Name => 'SolutionNotify',
SelectedID => $Param{SolutionNotify} || $SLAData{SolutionNotify},
Translation => 0,
PossibleNone => 1,
);
# get valid list
my %ValidList = $Kernel::OM->Get('Kernel::System::Valid')->ValidList();
my %ValidListReverse = reverse %ValidList;
$SLAData{ValidOptionStrg} = $LayoutObject->BuildSelection(
Data => \%ValidList,
Name => 'ValidID',
SelectedID => $Param{ValidID} || $SLAData{ValidID} || $ValidListReverse{valid},
Class => 'Modernize',
);
# output sla edit
$LayoutObject->Block(
Name => 'Overview',
Data => {
%Param
},
);
$LayoutObject->Block( Name => 'ActionList' );
$LayoutObject->Block( Name => 'ActionOverview' );
$LayoutObject->Block(
Name => 'SLAEdit',
Data => {
%Param,
%SLAData,
},
);
# shows header
if ( $SLAData{SLAID} ) {
$LayoutObject->Block( Name => 'HeaderEdit' );
}
else {
$LayoutObject->Block( Name => 'HeaderAdd' );
}
# show each preferences setting
my %Preferences = ();
if ( $ConfigObject->Get('SLAPreferences') ) {
%Preferences = %{ $ConfigObject->Get('SLAPreferences') };
}
for my $Item ( sort keys %Preferences ) {
my $Module = $Preferences{$Item}->{Module}
|| 'Kernel::Output::HTML::SLAPreferences::Generic';
# load module
if ( !$Kernel::OM->Get('Kernel::System::Main')->Require($Module) ) {
return $LayoutObject->FatalError();
}
my $Object = $Module->new(
%{$Self},
ConfigItem => $Preferences{$Item},
Debug => $Self->{Debug},
);
my @Params = $Object->Param( SLAData => \%SLAData );
if (@Params) {
for my $ParamItem (@Params) {
$LayoutObject->Block(
Name => 'SLAItem',
Data => { %Param, },
);
if (
ref( $ParamItem->{Data} ) eq 'HASH'
|| ref( $Preferences{$Item}->{Data} ) eq 'HASH'
)
{
my %BuildSelectionParams = (
%{ $Preferences{$Item} },
%{$ParamItem},
);
$BuildSelectionParams{Class} = join( ' ', $BuildSelectionParams{Class} // '', 'Modernize' );
$ParamItem->{'Option'} = $LayoutObject->BuildSelection(
%BuildSelectionParams,
);
}
$LayoutObject->Block(
Name => $ParamItem->{Block} || $Preferences{$Item}->{Block} || 'Option',
Data => {
%{ $Preferences{$Item} },
%{$ParamItem},
},
);
}
}
}
# get output back
return $LayoutObject->Output(
TemplateFile => 'AdminSLA',
Data => \%Param
);
}
1;