125 lines
3.5 KiB
Perl
125 lines
3.5 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::Modules::PublicCalendar;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use MIME::Base64 qw();
|
|
use Kernel::Language qw(Translatable);
|
|
|
|
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 %GetParam;
|
|
|
|
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
|
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
|
|
|
|
# check needed parameters
|
|
for my $Needed (qw(CalendarID User Token)) {
|
|
$GetParam{$Needed} = $ParamObject->GetParam( Param => $Needed );
|
|
if ( !$GetParam{$Needed} ) {
|
|
return $LayoutObject->CustomerErrorScreen(
|
|
Message => $LayoutObject->{LanguageObject}->Translate( 'No %s!', $Needed ),
|
|
Comment => Translatable('Please contact the administrator.'),
|
|
);
|
|
}
|
|
}
|
|
|
|
# get user
|
|
my %User = $Kernel::OM->Get('Kernel::System::User')->GetUserData(
|
|
User => $GetParam{User},
|
|
Valid => 1,
|
|
);
|
|
if ( !%User ) {
|
|
return $LayoutObject->ErrorScreen(
|
|
Message => Translatable('No such user!'),
|
|
Comment => Translatable('Please contact the administrator.'),
|
|
);
|
|
}
|
|
|
|
my $CalendarObject = $Kernel::OM->Get('Kernel::System::Calendar');
|
|
|
|
# get calendar
|
|
my %Calendar = $CalendarObject->CalendarGet(
|
|
CalendarID => $GetParam{CalendarID},
|
|
UserID => $User{UserID},
|
|
);
|
|
|
|
if ( !%Calendar ) {
|
|
return $LayoutObject->ErrorScreen(
|
|
Message => Translatable('No permission!'),
|
|
Comment => Translatable('Please contact the administrator.'),
|
|
);
|
|
}
|
|
|
|
if ( $Calendar{ValidID} != 1 ) {
|
|
return $LayoutObject->ErrorScreen(
|
|
Message => Translatable('Invalid calendar!'),
|
|
Comment => Translatable('Please contact the administrator.'),
|
|
);
|
|
}
|
|
|
|
# check access token
|
|
my $AccessToken = $CalendarObject->GetAccessToken(
|
|
CalendarID => $GetParam{CalendarID},
|
|
UserLogin => $GetParam{User},
|
|
);
|
|
|
|
if ( $AccessToken ne $GetParam{Token} ) {
|
|
return $LayoutObject->ErrorScreen(
|
|
Message => Translatable('Invalid URL!'),
|
|
Comment => Translatable('Please contact the administrator.'),
|
|
);
|
|
}
|
|
|
|
# get iCalendar string
|
|
my $ICalString = $Kernel::OM->Get('Kernel::System::Calendar::Export::ICal')->Export(
|
|
CalendarID => $Calendar{CalendarID},
|
|
UserID => $User{UserID},
|
|
);
|
|
|
|
if ( !$ICalString ) {
|
|
return $LayoutObject->ErrorScreen(
|
|
Message => Translatable('There was an error exporting the calendar!'),
|
|
Comment => Translatable('Please contact the administrator.'),
|
|
);
|
|
}
|
|
|
|
# prepare the file name
|
|
my $Filename = $Kernel::OM->Get('Kernel::System::Main')->FilenameCleanUp(
|
|
Filename => "$Calendar{CalendarName}.ics",
|
|
Type => 'Attachment',
|
|
);
|
|
|
|
# send iCal response
|
|
return $LayoutObject->Attachment(
|
|
ContentType => 'text/calendar',
|
|
Charset => $LayoutObject->{Charset},
|
|
Content => $ICalString,
|
|
Filename => $Filename,
|
|
NoCache => 1,
|
|
);
|
|
}
|
|
|
|
1;
|