199 lines
5.9 KiB
Perl
199 lines
5.9 KiB
Perl
# --
|
|
# Copyright (C) 2001-2019 OTRS AG, https://otrs.com/
|
|
# --
|
|
# 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 https://www.gnu.org/licenses/gpl-3.0.txt.
|
|
# --
|
|
|
|
package Kernel::Output::HTML::Preferences::OutOfOffice;
|
|
|
|
use parent 'Kernel::Output::HTML::Base';
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Kernel::Language qw(Translatable);
|
|
|
|
our $ObjectManagerDisabled = 1;
|
|
|
|
sub Param {
|
|
my ( $Self, %Param ) = @_;
|
|
|
|
# get layout object
|
|
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
|
|
|
my @Params;
|
|
if ( $Param{UserData}->{OutOfOffice} ) {
|
|
$Param{OutOfOfficeOn} = 'checked="checked"';
|
|
}
|
|
else {
|
|
$Param{OutOfOfficeOff} = 'checked="checked"';
|
|
}
|
|
$Param{OptionStart} = $LayoutObject->BuildDateSelection(
|
|
Format => 'DateInputFormat',
|
|
Area => 'no',
|
|
Prefix => 'OutOfOfficeStart',
|
|
OutOfOfficeStartYear => $Param{UserData}->{OutOfOfficeStartYear},
|
|
OutOfOfficeStartMonth => $Param{UserData}->{OutOfOfficeStartMonth},
|
|
OutOfOfficeStartDay => $Param{UserData}->{OutOfOfficeStartDay},
|
|
OutOfOfficeStartHour => 0,
|
|
OutOfOfficeStartMinute => 0,
|
|
YearPeriodPast => 1,
|
|
YearPeriodFuture => 5,
|
|
Validate => 1,
|
|
|
|
# Do not convert to local time zone, show stored date as-is
|
|
# (please see bug#12471 for more information).
|
|
OverrideTimeZone => 1,
|
|
);
|
|
$Param{OptionEnd} = $LayoutObject->BuildDateSelection(
|
|
Format => 'DateInputFormat',
|
|
Area => 'no',
|
|
DiffTime => 60 * 60 * 24 * 1,
|
|
Prefix => 'OutOfOfficeEnd',
|
|
OutOfOfficeEndYear => $Param{UserData}->{OutOfOfficeEndYear},
|
|
OutOfOfficeEndMonth => $Param{UserData}->{OutOfOfficeEndMonth},
|
|
OutOfOfficeEndDay => $Param{UserData}->{OutOfOfficeEndDay},
|
|
OutOfOfficeEndHour => 0,
|
|
OutOfOfficeEndMinute => 0,
|
|
YearPeriodPast => 1,
|
|
YearPeriodFuture => 5,
|
|
Validate => 1,
|
|
|
|
# Do not convert to local time zone, show stored date as-is
|
|
# (please see bug#12471 for more information).
|
|
OverrideTimeZone => 1,
|
|
);
|
|
|
|
push(
|
|
@Params,
|
|
{
|
|
%Param,
|
|
Block => 'OutOfOffice',
|
|
},
|
|
);
|
|
return @Params;
|
|
}
|
|
|
|
sub Run {
|
|
my ( $Self, %Param ) = @_;
|
|
|
|
# get needed objects
|
|
my $UserObject = $Kernel::OM->Get('Kernel::System::User');
|
|
my $SessionObject = $Kernel::OM->Get('Kernel::System::AuthSession');
|
|
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
|
|
my $LanguageObject = $Kernel::OM->Get('Kernel::Language');
|
|
|
|
for my $Key (
|
|
qw(OutOfOffice OutOfOfficeStartYear OutOfOfficeStartMonth OutOfOfficeStartDay OutOfOfficeEndYear OutOfOfficeEndMonth OutOfOfficeEndDay)
|
|
)
|
|
{
|
|
$Param{$Key} = $ParamObject->GetParam( Param => $Key ) || '';
|
|
}
|
|
|
|
my $OOOStartDTObject = $Self->_GetOutOfOfficeDateTimeObject(
|
|
Type => 'Start',
|
|
Data => \%Param
|
|
);
|
|
my $OOOEndDTObject = $Self->_GetOutOfOfficeDateTimeObject(
|
|
Type => 'End',
|
|
Data => \%Param
|
|
);
|
|
|
|
if ( !$OOOStartDTObject || !$OOOEndDTObject ) {
|
|
return 1;
|
|
}
|
|
elsif ( $OOOStartDTObject <= $OOOEndDTObject ) {
|
|
my $SessionID = $Kernel::OM->Get('Kernel::Output::HTML::Layout')->{SessionID};
|
|
for my $Key (
|
|
qw(OutOfOffice OutOfOfficeStartYear OutOfOfficeStartMonth OutOfOfficeStartDay OutOfOfficeEndYear OutOfOfficeEndMonth OutOfOfficeEndDay)
|
|
)
|
|
{
|
|
if ( defined $Param{$Key} ) {
|
|
|
|
# pref update db
|
|
if ( !$Kernel::OM->Get('Kernel::Config')->Get('DemoSystem') ) {
|
|
$UserObject->SetPreferences(
|
|
UserID => $Param{UserData}->{UserID},
|
|
Key => $Key,
|
|
Value => $Param{$Key},
|
|
);
|
|
}
|
|
|
|
# update SessionID
|
|
if ( $Param{UserData}->{UserID} eq $Self->{UserID} ) {
|
|
$SessionObject->UpdateSessionID(
|
|
SessionID => $SessionID,
|
|
Key => $Key,
|
|
Value => $Param{$Key},
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
# also update the lastname to remove out of office message
|
|
if ( $Param{UserData}->{UserID} eq $Self->{UserID} ) {
|
|
my %User = $UserObject->GetUserData( UserID => $Self->{UserID} );
|
|
|
|
$SessionObject->UpdateSessionID(
|
|
SessionID => $SessionID,
|
|
Key => 'UserLastname',
|
|
Value => $User{UserLastname},
|
|
);
|
|
}
|
|
|
|
$Self->{Message} = Translatable('Preferences updated successfully!');
|
|
}
|
|
else {
|
|
$Self->{Error} = $LanguageObject->Translate('Please specify an end date that is after the start date.');
|
|
return;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
sub Error {
|
|
my ( $Self, %Param ) = @_;
|
|
|
|
return $Self->{Error} || '';
|
|
}
|
|
|
|
sub Message {
|
|
my ( $Self, %Param ) = @_;
|
|
|
|
return $Self->{Message} || '';
|
|
}
|
|
|
|
sub _GetOutOfOfficeDateTimeObject {
|
|
my ( $Self, %Param ) = @_;
|
|
|
|
my $Type = $Param{Type};
|
|
my $Data = $Param{Data};
|
|
|
|
my $Year = $Data->{"OutOfOffice${Type}Year"};
|
|
my $Month = $Data->{"OutOfOffice${Type}Month"};
|
|
my $Day = $Data->{"OutOfOffice${Type}Day"};
|
|
|
|
if ( $Year && $Month && $Day ) {
|
|
my $DTString = sprintf(
|
|
'%s-%s-%s %s',
|
|
$Year,
|
|
$Month,
|
|
$Day,
|
|
( $Type eq 'End' ? '23:59:59' : '00:00:00' ),
|
|
);
|
|
|
|
return $Kernel::OM->Create(
|
|
'Kernel::System::DateTime',
|
|
ObjectParams => {
|
|
String => $DTString,
|
|
},
|
|
);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
1;
|