init III
This commit is contained in:
241
Perl OTRS/Kernel/Output/HTML/Dashboard/ProductNotify.pm
Normal file
241
Perl OTRS/Kernel/Output/HTML/Dashboard/ProductNotify.pm
Normal file
@@ -0,0 +1,241 @@
|
||||
# --
|
||||
# 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::Dashboard::ProductNotify;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Kernel::System::VariableCheck qw(:all);
|
||||
|
||||
our $ObjectManagerDisabled = 1;
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
# allocate new hash for object
|
||||
my $Self = {%Param};
|
||||
bless( $Self, $Type );
|
||||
|
||||
# get needed parameters
|
||||
for my $Needed (qw(Config Name UserID)) {
|
||||
die "Got no $Needed!" if ( !$Self->{$Needed} );
|
||||
}
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
sub Preferences {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
sub Config {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
return (
|
||||
%{ $Self->{Config} },
|
||||
);
|
||||
}
|
||||
|
||||
sub Run {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# get config object
|
||||
my $ConfigObject = $Kernel::OM->Get('Kernel::Config');
|
||||
|
||||
# check if cloud services are disabled
|
||||
my $CloudServicesDisabled = $ConfigObject->Get('CloudServices::Disabled') || 0;
|
||||
|
||||
return '' if $CloudServicesDisabled;
|
||||
|
||||
# get current
|
||||
my $Product = $ConfigObject->Get('Product');
|
||||
my $Version = $ConfigObject->Get('Version');
|
||||
|
||||
my $CloudService = 'PublicFeeds';
|
||||
my $Operation = 'ProductFeed';
|
||||
|
||||
# get layout object
|
||||
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
||||
|
||||
# check cache
|
||||
my $CacheKey = "CloudService::" . $CloudService . "::Operation::" . $Operation . "::Language::"
|
||||
. $LayoutObject->{UserLanguage} . "::Product::" . $Product . "::Version::$Version";
|
||||
|
||||
# get cache object
|
||||
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
|
||||
|
||||
my $CacheContent = $CacheObject->Get(
|
||||
Type => 'DashboardProductNotify',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
|
||||
return $CacheContent if defined $CacheContent;
|
||||
|
||||
# prepare cloud service request
|
||||
my %RequestParams = (
|
||||
RequestData => {
|
||||
$CloudService => [
|
||||
{
|
||||
Operation => $Operation,
|
||||
Data => {
|
||||
Product => $Product,
|
||||
Version => $Version,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
);
|
||||
|
||||
# get cloud service object
|
||||
my $CloudServiceObject = $Kernel::OM->Get('Kernel::System::CloudService::Backend::Run');
|
||||
|
||||
# dispatch the cloud service request
|
||||
my $RequestResult = $CloudServiceObject->Request(%RequestParams);
|
||||
|
||||
# as this is the only operation an unsuccessful request means that the operation was also
|
||||
# unsuccessful
|
||||
if ( !IsHashRefWithData($RequestResult) ) {
|
||||
return $LayoutObject->{LanguageObject}->Translate('Can\'t connect to Product News server!');
|
||||
}
|
||||
|
||||
my $OperationResult = $CloudServiceObject->OperationResultGet(
|
||||
RequestResult => $RequestResult,
|
||||
CloudService => $CloudService,
|
||||
Operation => $Operation,
|
||||
);
|
||||
|
||||
if ( !IsHashRefWithData($OperationResult) ) {
|
||||
return $LayoutObject->{LanguageObject}->Translate('Can\'t get Product News from server!');
|
||||
}
|
||||
elsif ( !$OperationResult->{Success} ) {
|
||||
return $OperationResult->{ErrorMessage} ||
|
||||
$LayoutObject->{LanguageObject}->Translate('Can\'t get Product News from server!');
|
||||
}
|
||||
|
||||
my $ProductFeed = $OperationResult->{Data};
|
||||
|
||||
# remember if content got shown
|
||||
my $ContentFound = 0;
|
||||
|
||||
# show messages
|
||||
if ( IsArrayRefWithData( $ProductFeed->{Message} ) ) {
|
||||
|
||||
MESSAGE:
|
||||
for my $Message ( @{ $ProductFeed->{Message} } ) {
|
||||
|
||||
next MESSAGE if !$Message;
|
||||
|
||||
# remember if content got shown
|
||||
$ContentFound = 1;
|
||||
$LayoutObject->Block(
|
||||
Name => 'ContentProductMessage',
|
||||
Data => {
|
||||
Message => $Message,
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
# show release updates
|
||||
if ( IsArrayRefWithData( $ProductFeed->{Release} ) ) {
|
||||
|
||||
RELEASE:
|
||||
for my $Release ( @{ $ProductFeed->{Release} } ) {
|
||||
|
||||
next RELEASE if !$Release;
|
||||
|
||||
# check if release is newer then the installed one
|
||||
next RELEASE if !$Self->_CheckVersion(
|
||||
Version1 => $Version,
|
||||
Version2 => $Release->{Version},
|
||||
);
|
||||
|
||||
# remember if content got shown
|
||||
$ContentFound = 1;
|
||||
$LayoutObject->Block(
|
||||
Name => 'ContentProductRelease',
|
||||
Data => {
|
||||
Name => $Release->{Name},
|
||||
Version => $Release->{Version},
|
||||
Link => $Release->{Link},
|
||||
Severity => $Release->{Severity},
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
# check if content got shown, if true, render block
|
||||
my $Content;
|
||||
if ($ContentFound) {
|
||||
$Content = $LayoutObject->Output(
|
||||
TemplateFile => 'AgentDashboardProductNotify',
|
||||
Data => {
|
||||
%{ $Self->{Config} },
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
# check if we need to set CacheTTL based on feed
|
||||
if ( $ProductFeed->{CacheTTL} ) {
|
||||
$Self->{Config}->{CacheTTLLocal} = $ProductFeed->{CacheTTL};
|
||||
}
|
||||
|
||||
# cache result
|
||||
if ( $Self->{Config}->{CacheTTLLocal} ) {
|
||||
$CacheObject->Set(
|
||||
Type => 'DashboardProductNotify',
|
||||
Key => $CacheKey,
|
||||
Value => $Content || '',
|
||||
TTL => $Self->{Config}->{CacheTTLLocal} * 60,
|
||||
);
|
||||
}
|
||||
|
||||
# return content
|
||||
return $Content;
|
||||
}
|
||||
|
||||
sub _CheckVersion {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# check needed stuff
|
||||
for my $Needed (qw(Version1 Version2)) {
|
||||
if ( !defined $Param{$Needed} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
||||
Priority => 'error',
|
||||
Message => "$Needed not defined!",
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
for my $Type (qw(Version1 Version2)) {
|
||||
$Param{$Type} =~ s/\s/\./g;
|
||||
$Param{$Type} =~ s/[A-z]/0/g;
|
||||
|
||||
my @Parts = split /\./, $Param{$Type};
|
||||
$Param{$Type} = 0;
|
||||
for ( 0 .. 4 ) {
|
||||
if ( IsNumber( $Parts[$_] ) ) {
|
||||
$Param{$Type} .= sprintf( "%04d", $Parts[$_] );
|
||||
}
|
||||
else {
|
||||
$Param{$Type} .= '0000';
|
||||
}
|
||||
}
|
||||
$Param{$Type} = int( $Param{$Type} );
|
||||
}
|
||||
|
||||
return 1 if ( $Param{Version2} > $Param{Version1} );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
1;
|
||||
Reference in New Issue
Block a user