Files
scripts/Perl OTRS/Kernel/Modules/AdminOTRSBusiness.pm
2024-10-14 00:08:40 +02:00

390 lines
13 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::AdminOTRSBusiness;
use strict;
use warnings;
use utf8;
use Kernel::System::VariableCheck qw(:all);
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 ) = @_;
# get layout object
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
# check if cloud services are disabled
my $CloudServicesDisabled = $Kernel::OM->Get('Kernel::Config')->Get('CloudServices::Disabled') || 0;
if ($CloudServicesDisabled) {
my $Output = $LayoutObject->Header(
Title => Translatable('Error'),
);
$Output .= $LayoutObject->Output(
TemplateFile => 'CloudServicesDisabled',
Data => \%Param
);
$Output .= $LayoutObject->Footer();
return $Output;
}
# get needed objects
my $OTRSBusinessObject = $Kernel::OM->Get('Kernel::System::OTRSBusiness');
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
my $OTRSBusinessLabel = '<strong>OTRS Business Solution</strong>™';
my $NotificationCode = $ParamObject->GetParam( Param => 'NotificationCode' );
my %NotificationCode2Text = (
InstallOk => {
Priority => 'Success',
Data => $LayoutObject->{LanguageObject}
->Translate( 'Your system was successfully upgraded to %s.', $OTRSBusinessLabel ),
},
InstallError => {
Priority => 'Error',
Data => $LayoutObject->{LanguageObject}
->Translate( 'There was a problem during the upgrade to %s.', $OTRSBusinessLabel ),
},
ReinstallOk => {
Priority => 'Success',
Data => $LayoutObject->{LanguageObject}->Translate( '%s was correctly reinstalled.', $OTRSBusinessLabel ),
},
ReinstallError => {
Priority => 'Error',
Data => $LayoutObject->{LanguageObject}
->Translate( 'There was a problem reinstalling %s.', $OTRSBusinessLabel ),
},
UpdateOk => {
Priority => 'Success',
Data =>
$LayoutObject->{LanguageObject}->Translate( 'Your %s was successfully updated.', $OTRSBusinessLabel ),
},
UpdateError => {
Priority => 'Error',
Data => $LayoutObject->{LanguageObject}
->Translate( 'There was a problem during the upgrade of %s.', $OTRSBusinessLabel ),
},
UninstallOk => {
Priority => 'Success',
Data => $LayoutObject->{LanguageObject}->Translate( '%s was correctly uninstalled.', $OTRSBusinessLabel ),
},
UninstallError => {
Priority => 'Error',
Data => $LayoutObject->{LanguageObject}
->Translate( 'There was a problem uninstalling %s.', $OTRSBusinessLabel ),
},
);
my $Notification;
if ($NotificationCode) {
$Notification = $NotificationCode2Text{$NotificationCode};
}
if ( $Self->{Subaction} eq 'Uninstall' ) {
return $Self->UninstallScreen(
Notification => $Notification,
);
}
elsif ( $Self->{Subaction} eq 'UninstallAction' ) {
my $Result = $OTRSBusinessObject->OTRSBusinessUninstall();
my $Notification;
if ($Result) {
return $LayoutObject->Redirect(
OP => "Action=AdminOTRSBusiness;NotificationCode=UninstallOk"
);
}
return $LayoutObject->Redirect(
OP => "Action=AdminOTRSBusiness;NotificationCode=UninstallError"
);
}
elsif ( $Self->{Subaction} eq 'ReinstallAction' ) {
my $Result = $OTRSBusinessObject->OTRSBusinessReinstall();
my $Notification;
if ($Result) {
return $LayoutObject->Redirect(
OP => "Action=AdminOTRSBusiness;NotificationCode=ReinstallOk"
);
}
return $LayoutObject->Redirect(
OP => "Action=AdminOTRSBusiness;NotificationCode=ReinstallError"
);
}
elsif ( $Self->{Subaction} eq 'InstallAction' ) {
my %Response = $OTRSBusinessObject->OTRSBusinessInstall();
if ( $Response{Success} ) {
return $LayoutObject->Redirect(
OP => "Action=AdminOTRSBusiness;NotificationCode=InstallOk"
);
}
my $Parameters = '';
if ( $Response{RequiredFrameworkMinimum} ) {
$Parameters .= ";RequiredFrameworkMinimum=$Response{RequiredFrameworkMinimum}";
}
if ( $Response{RequiredFrameworkMaximum} ) {
$Parameters .= ";RequiredFrameworkMaximum=$Response{RequiredFrameworkMaximum}";
}
if ( $Response{ShowBlock} ) {
$Parameters .= ";ShowBlock=$Response{ShowBlock}";
}
return $LayoutObject->Redirect(
OP => "Action=AdminOTRSBusiness;NotificationCode=InstallError" . $Parameters,
);
}
elsif ( $Self->{Subaction} eq 'UpdateAction' ) {
my %Response = $OTRSBusinessObject->OTRSBusinessUpdate();
if ( $Response{Success} ) {
return $LayoutObject->Redirect(
OP => "Action=AdminOTRSBusiness;NotificationCode=UpdateOk"
);
}
my $Parameters = '';
if ( $Response{RequiredFrameworkMinimum} ) {
$Parameters .= ";RequiredFrameworkMinimum=$Response{RequiredFrameworkMinimum}";
}
if ( $Response{RequiredFrameworkMaximum} ) {
$Parameters .= ";RequiredFrameworkMaximum=$Response{RequiredFrameworkMaximum}";
}
if ( $Response{ShowBlock} ) {
$Parameters .= ";ShowBlock=$Response{ShowBlock}";
}
return $LayoutObject->Redirect(
OP => "Action=AdminOTRSBusiness;NotificationCode=UpdateError" . $Parameters,
);
}
# OTRSBusiness not yet installed?
if ( !$OTRSBusinessObject->OTRSBusinessIsInstalled() ) {
return $Self->NotInstalledScreen(
Notification => $Notification,
);
}
# OK, installed.
return $Self->InstalledScreen(
Notification => $Notification,
);
}
sub NotInstalledScreen {
my ( $Self, %Param ) = @_;
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
my $OTRSBusinessObject = $Kernel::OM->Get('Kernel::System::OTRSBusiness');
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
if ( $Param{Notification} ) {
$Output .= $LayoutObject->Notify( %{ $Param{Notification} } );
}
my $RegistrationObject = $Kernel::OM->Get('Kernel::System::Registration');
my %RegistrationData = $RegistrationObject->RegistrationDataGet();
my $EntitlementStatus = 'forbidden';
if ( $RegistrationData{State} && $RegistrationData{State} eq 'registered' ) {
$EntitlementStatus = $OTRSBusinessObject->OTRSBusinessEntitlementStatus(
CallCloudService => 1,
);
}
if ( !%RegistrationData || $RegistrationData{State} ne 'registered' ) {
$LayoutObject->Block(
Name => 'NotRegistered',
);
}
elsif ( !$OTRSBusinessObject->OTRSBusinessIsAvailable() ) {
$LayoutObject->Block(
Name => 'NotAvailable',
);
}
elsif ( $EntitlementStatus eq 'forbidden' ) {
$LayoutObject->Block(
Name => 'NotEntitled',
);
}
elsif ( $EntitlementStatus ne 'entitled' ) {
$LayoutObject->Block(
Name => 'EntitlementStatusUnclear',
);
}
else {
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
my %GetParam;
$GetParam{ShowBlock} = $ParamObject->GetParam( Param => 'ShowBlock' ) || '';
$GetParam{RequiredMinimumVersion} = $ParamObject->GetParam( Param => 'RequiredFrameworkMinimum' ) || '';
$GetParam{RequiredMaximumVersion} = $ParamObject->GetParam( Param => 'RequiredFrameworkMaximum' ) || '';
my $NotificationCode = $ParamObject->GetParam( Param => 'NotificationCode' ) || '';
if ( $NotificationCode eq 'InstallError' ) {
$GetParam{Type} = 'InstallIncompatible';
}
if ( $GetParam{Type} ) {
$LayoutObject->Block(
Name => 'Actions',
Data => \%GetParam,
);
}
$LayoutObject->Block(
Name => 'Install',
Data => \%GetParam,
);
}
$Output .= $LayoutObject->Output(
TemplateFile => 'AdminOTRSBusinessNotInstalled',
);
$Output .= $LayoutObject->Footer();
return $Output;
}
sub InstalledScreen {
my ( $Self, %Param ) = @_;
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
my $OTRSBusinessObject = $Kernel::OM->Get('Kernel::System::OTRSBusiness');
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
if ( $Param{Notification} ) {
$Output .= $LayoutObject->Notify( %{ $Param{Notification} } );
}
my $RegistrationObject = $Kernel::OM->Get('Kernel::System::Registration');
my %RegistrationData = $RegistrationObject->RegistrationDataGet();
if (
!%RegistrationData
|| $RegistrationData{State} ne 'registered'
|| $OTRSBusinessObject->OTRSBusinessEntitlementStatus( CallCloudService => 1 ) eq 'forbidden'
)
{
$LayoutObject->Block(
Name => 'NotEntitled',
);
}
else {
if ( !$OTRSBusinessObject->OTRSBusinessIsCorrectlyDeployed() ) {
if ( $OTRSBusinessObject->OTRSBusinessIsUpdateable() ) {
$LayoutObject->Block(
Name => 'NeedsReinstallAndUpdate',
);
}
elsif ( $OTRSBusinessObject->OTRSBusinessIsReinstallable() ) {
$LayoutObject->Block(
Name => 'NeedsReinstall',
);
}
else {
$LayoutObject->Block(
Name => 'ReinstallImpossible',
);
}
}
elsif ( $OTRSBusinessObject->OTRSBusinessIsUpdateable() ) {
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
my %GetParam;
$GetParam{ShowBlock} = $ParamObject->GetParam( Param => 'ShowBlock' ) || '';
$GetParam{RequiredMinimumVersion} = $ParamObject->GetParam( Param => 'RequiredFrameworkMinimum' ) || '';
$GetParam{RequiredMaximumVersion} = $ParamObject->GetParam( Param => 'RequiredFrameworkMaximum' ) || '';
my $NotificationCode = $ParamObject->GetParam( Param => 'NotificationCode' ) || '';
if ( $NotificationCode eq 'UpdateError' ) {
$GetParam{Type} = 'UpgradeIncompatible';
}
if ( $GetParam{Type} ) {
$LayoutObject->Block(
Name => 'Actions',
);
}
$LayoutObject->Block(
Name => 'NeedsUpdate',
Data => \%GetParam,
);
}
else {
$LayoutObject->Block(
Name => 'EverythingOk',
);
}
}
$Output .= $LayoutObject->Output(
TemplateFile => 'AdminOTRSBusinessInstalled',
);
$Output .= $LayoutObject->Footer();
return $Output;
}
sub UninstallScreen {
my ( $Self, %Param ) = @_;
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
my $OTRSBusinessObject = $Kernel::OM->Get('Kernel::System::OTRSBusiness');
if ( !$OTRSBusinessObject->OTRSBusinessIsInstalled() ) {
return $LayoutObject->Redirect(
OP => "Action=AdminOTRSBusiness"
);
}
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
if ( $Param{Notification} ) {
$Output .= $LayoutObject->Notify( %{ $Param{Notification} } );
}
# check for dependencies. If there are any, downgrade is not allowed.
my $Dependencies = $OTRSBusinessObject->OTRSBusinessGetDependencies();
if ( IsArrayRefWithData($Dependencies) ) {
$LayoutObject->Block(
Name => 'DowngradeNotPossible',
Data => {
Packages => $Dependencies,
}
);
}
else {
$LayoutObject->Block(
Name => 'DowngradePossible',
);
}
$Output .= $LayoutObject->Output(
TemplateFile => 'AdminOTRSBusinessUninstall',
);
$Output .= $LayoutObject->Footer();
return $Output;
}
1;