init III
This commit is contained in:
587
Perl OTRS/Kernel/Modules/AdminITSMChangeNotification.pm
Normal file
587
Perl OTRS/Kernel/Modules/AdminITSMChangeNotification.pm
Normal file
@@ -0,0 +1,587 @@
|
||||
# --
|
||||
# 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::AdminITSMChangeNotification;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
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 ) = @_;
|
||||
|
||||
# hash with feedback to the user
|
||||
my %Notification;
|
||||
|
||||
# get needed objects
|
||||
my $ConfigObject = $Kernel::OM->Get('Kernel::Config');
|
||||
my $NotificationObject = $Kernel::OM->Get('Kernel::System::ITSMChange::Notification');
|
||||
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
|
||||
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
||||
|
||||
my $RichText = $ConfigObject->Get('Frontend::RichText');
|
||||
|
||||
if ( $RichText && !$ConfigObject->Get("ITSMChange::Frontend::$Self->{Action}")->{RichText} ) {
|
||||
$RichText = 0;
|
||||
}
|
||||
|
||||
# set content type for notifications
|
||||
my $ContentType = 'text/plain';
|
||||
if ($RichText) {
|
||||
$ContentType = 'text/html';
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------ #
|
||||
# change
|
||||
# ------------------------------------------------------------ #
|
||||
if ( $Self->{Subaction} eq 'Change' ) {
|
||||
my $ID = $ParamObject->GetParam( Param => 'ID' ) || '';
|
||||
my $Data = $NotificationObject->NotificationRuleGet( ID => $ID );
|
||||
|
||||
$Self->_Edit(
|
||||
Action => 'Change',
|
||||
ActionLabel => 'Edit',
|
||||
RichText => $RichText,
|
||||
%{$Data},
|
||||
);
|
||||
|
||||
my $Status = $ParamObject->GetParam( Param => 'Status' ) || '';
|
||||
|
||||
if ( $Status eq 'Updated' ) {
|
||||
%Notification = (
|
||||
Info => Translatable('Notification updated!'),
|
||||
);
|
||||
}
|
||||
elsif ( $Status eq 'Added' ) {
|
||||
%Notification = (
|
||||
Info => Translatable('Notification Added!'),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------ #
|
||||
# change action
|
||||
# ------------------------------------------------------------ #
|
||||
elsif ( $Self->{Subaction} eq 'ChangeAction' ) {
|
||||
|
||||
# challenge token check for write action
|
||||
$LayoutObject->ChallengeTokenCheck();
|
||||
|
||||
my %GetParam;
|
||||
|
||||
# get scalar parameters
|
||||
for my $Param (qw(ID Name EventID Comment ValidID Attribute Rule)) {
|
||||
$GetParam{$Param} = $ParamObject->GetParam( Param => $Param ) || '';
|
||||
}
|
||||
|
||||
# get array parameters
|
||||
$GetParam{RecipientIDs} = [
|
||||
$ParamObject->GetArray( Param => 'RecipientIDs' )
|
||||
];
|
||||
|
||||
# get message parameters for agents and customers and each present language
|
||||
for my $Type (qw(Agent Customer)) {
|
||||
|
||||
my @LanguageIDs = $ParamObject->GetArray( Param => $Type . '_LanguageID' );
|
||||
|
||||
# get the subject and body for all languages
|
||||
for my $LanguageID (@LanguageIDs) {
|
||||
|
||||
my $Subject = $ParamObject->GetParam( Param => $Type . '_' . $LanguageID . '_Subject' ) || '';
|
||||
my $Body = $ParamObject->GetParam( Param => $Type . '_' . $LanguageID . '_Body' ) || '';
|
||||
|
||||
$GetParam{Message}->{$Type}->{$LanguageID} = {
|
||||
Subject => $Subject,
|
||||
Body => $Body,
|
||||
ContentType => $ContentType,
|
||||
};
|
||||
|
||||
# set server error flag if field is empty
|
||||
if ( !$Subject ) {
|
||||
$GetParam{ $Type . '_' . $LanguageID . '_SubjectServerError' } = "ServerError";
|
||||
}
|
||||
if ( !$Body ) {
|
||||
$GetParam{ $Type . '_' . $LanguageID . '_BodyServerError' } = "ServerError";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# update notification
|
||||
if ( $NotificationObject->NotificationRuleUpdate(%GetParam) ) {
|
||||
|
||||
my $ContinueAfterSave = $ParamObject->GetParam( Param => 'ContinueAfterSave' );
|
||||
|
||||
if ($ContinueAfterSave) {
|
||||
return $LayoutObject->Redirect(
|
||||
OP => "Action=$Self->{Action};Subaction=Change;ID=$GetParam{ID};Status=Updated"
|
||||
);
|
||||
}
|
||||
|
||||
return $LayoutObject->Redirect( OP => "Action=$Self->{Action};Status=Updated" );
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
# an error occured -> show notification
|
||||
%Notification = ( Priority => 'Error' );
|
||||
|
||||
$Self->_Edit(
|
||||
Action => 'Change',
|
||||
ActionLabel => 'Edit',
|
||||
RichText => $RichText,
|
||||
%GetParam,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------ #
|
||||
# add
|
||||
# ------------------------------------------------------------ #
|
||||
elsif ( $Self->{Subaction} eq 'Add' ) {
|
||||
$Self->_Edit(
|
||||
Action => 'Add',
|
||||
ActionLabel => 'Add',
|
||||
RichText => $RichText,
|
||||
);
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------ #
|
||||
# add action
|
||||
# ------------------------------------------------------------ #
|
||||
elsif ( $Self->{Subaction} eq 'AddAction' ) {
|
||||
|
||||
# challenge token check for write action
|
||||
$LayoutObject->ChallengeTokenCheck();
|
||||
|
||||
my %GetParam;
|
||||
|
||||
# get scalar parameters
|
||||
for my $Param (qw(ID Name EventID Comment ValidID Attribute Rule)) {
|
||||
$GetParam{$Param} = $ParamObject->GetParam( Param => $Param ) || '';
|
||||
}
|
||||
|
||||
# get array parameters
|
||||
$GetParam{RecipientIDs} = [
|
||||
$ParamObject->GetArray( Param => 'RecipientIDs' )
|
||||
];
|
||||
|
||||
# get message parameters for agents and customers and each present language
|
||||
for my $Type (qw(Agent Customer)) {
|
||||
|
||||
my @LanguageIDs = $ParamObject->GetArray( Param => $Type . '_LanguageID' );
|
||||
|
||||
# get the subject and body for all languages
|
||||
for my $LanguageID (@LanguageIDs) {
|
||||
|
||||
my $Subject = $ParamObject->GetParam( Param => $Type . '_' . $LanguageID . '_Subject' ) || '';
|
||||
my $Body = $ParamObject->GetParam( Param => $Type . '_' . $LanguageID . '_Body' ) || '';
|
||||
|
||||
$GetParam{Message}->{$Type}->{$LanguageID} = {
|
||||
Subject => $Subject,
|
||||
Body => $Body,
|
||||
ContentType => $ContentType,
|
||||
};
|
||||
|
||||
# set server error flag if field is empty
|
||||
if ( !$Subject ) {
|
||||
$GetParam{ $Type . '_' . $LanguageID . '_SubjectServerError' } = "ServerError";
|
||||
}
|
||||
if ( !$Body ) {
|
||||
$GetParam{ $Type . '_' . $LanguageID . '_BodyServerError' } = "ServerError";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# add notification
|
||||
my $NewID = $NotificationObject->NotificationRuleAdd(%GetParam);
|
||||
if ($NewID) {
|
||||
|
||||
my $ContinueAfterSave = $ParamObject->GetParam( Param => 'ContinueAfterSave' );
|
||||
|
||||
if ($ContinueAfterSave) {
|
||||
return $LayoutObject->Redirect(
|
||||
OP => "Action=$Self->{Action};Subaction=Change;ID=$NewID;Status=Added"
|
||||
);
|
||||
}
|
||||
|
||||
return $LayoutObject->Redirect( OP => "Action=$Self->{Action};Status=Added" );
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
# an error occured -> show notification
|
||||
%Notification = ( Priority => 'Error' );
|
||||
|
||||
$Self->_Edit(
|
||||
Action => 'Add',
|
||||
ActionLabel => 'Add',
|
||||
RichText => $RichText,
|
||||
%GetParam,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------ #
|
||||
# delete
|
||||
# ------------------------------------------------------------ #
|
||||
elsif ( $Self->{Subaction} eq 'Delete' ) {
|
||||
|
||||
# challenge token check for write action
|
||||
$LayoutObject->ChallengeTokenCheck();
|
||||
|
||||
my %GetParam;
|
||||
for my $Parameter (qw(ID)) {
|
||||
$GetParam{$Parameter} = $ParamObject->GetParam( Param => $Parameter ) || '';
|
||||
}
|
||||
|
||||
my $Delete = $NotificationObject->NotificationRuleDelete(
|
||||
ID => $GetParam{ID},
|
||||
);
|
||||
if ( !$Delete ) {
|
||||
return $LayoutObject->ErrorScreen();
|
||||
}
|
||||
|
||||
return $LayoutObject->Redirect( OP => "Action=$Self->{Action}" );
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------ #
|
||||
# NotificationCopy
|
||||
# ------------------------------------------------------------ #
|
||||
elsif ( $Self->{Subaction} eq 'NotificationCopy' ) {
|
||||
|
||||
# challenge token check for write action
|
||||
$LayoutObject->ChallengeTokenCheck();
|
||||
|
||||
my %GetParam;
|
||||
for my $Parameter (qw(ID)) {
|
||||
$GetParam{$Parameter} = $ParamObject->GetParam( Param => $Parameter ) || '';
|
||||
}
|
||||
|
||||
# get Notification data
|
||||
my $Data = $NotificationObject->NotificationRuleGet(
|
||||
ID => $GetParam{ID},
|
||||
);
|
||||
|
||||
if ( !IsHashRefWithData($Data) ) {
|
||||
return $LayoutObject->ErrorScreen(
|
||||
Message => $LayoutObject->{LanguageObject}->Translate( 'Unknown notification %s!', $GetParam{ID} ),
|
||||
);
|
||||
}
|
||||
|
||||
# create new Notification name
|
||||
my $NotificationName =
|
||||
$Data->{Name}
|
||||
. ' ('
|
||||
. $LayoutObject->{LanguageObject}->Translate('Copy')
|
||||
. ')';
|
||||
|
||||
# otherwise save configuration and return to overview screen
|
||||
my $NewNotificationID = $NotificationObject->NotificationRuleAdd(
|
||||
%{$Data},
|
||||
Name => $NotificationName,
|
||||
);
|
||||
|
||||
# show error if can't create
|
||||
if ( !$NewNotificationID ) {
|
||||
return $LayoutObject->ErrorScreen(
|
||||
Message => Translatable('There was an error creating the notification.'),
|
||||
);
|
||||
}
|
||||
|
||||
# return to overview
|
||||
return $LayoutObject->Redirect( OP => "Action=$Self->{Action}" );
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# overview
|
||||
# ------------------------------------------------------------
|
||||
else {
|
||||
$Self->_Overview();
|
||||
|
||||
my $Status = $ParamObject->GetParam( Param => 'Status' ) || '';
|
||||
|
||||
if ( $Status eq 'Updated' ) {
|
||||
%Notification = (
|
||||
Info => Translatable('Notification updated!'),
|
||||
);
|
||||
}
|
||||
elsif ( $Status eq 'Added' ) {
|
||||
%Notification = (
|
||||
Info => Translatable('Notification Added!'),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
my $Output = $LayoutObject->Header();
|
||||
$Output .= $LayoutObject->NavigationBar();
|
||||
|
||||
if (%Notification) {
|
||||
$Output .= $LayoutObject->Notify(%Notification) || '';
|
||||
}
|
||||
$Output .= $LayoutObject->Output(
|
||||
TemplateFile => 'AdminITSMChangeNotification',
|
||||
Data => \%Param,
|
||||
);
|
||||
$Output .= $LayoutObject->Footer();
|
||||
|
||||
return $Output;
|
||||
}
|
||||
|
||||
# show the edit mask for a notification rule
|
||||
sub _Edit {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# get needed objects
|
||||
my $ConfigObject = $Kernel::OM->Get('Kernel::Config');
|
||||
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
||||
my $HTMLUtilsObject = $Kernel::OM->Get('Kernel::System::HTMLUtils');
|
||||
my $ValidObject = $Kernel::OM->Get('Kernel::System::Valid');
|
||||
|
||||
$LayoutObject->Block(
|
||||
Name => 'Overview',
|
||||
Data => \%Param,
|
||||
);
|
||||
$LayoutObject->Block( Name => 'ActionList' );
|
||||
$LayoutObject->Block( Name => 'ActionOverview' );
|
||||
|
||||
$Param{ValidOption} = $LayoutObject->BuildSelection(
|
||||
Data => {
|
||||
$ValidObject->ValidList(),
|
||||
},
|
||||
Name => 'ValidID',
|
||||
SelectedID => $Param{ValidID} || ( $ValidObject->ValidIDsGet() )[0],
|
||||
Sort => 'NumericKey',
|
||||
Class => 'Modernize W50pc',
|
||||
);
|
||||
$Param{EventOption} = $LayoutObject->BuildSelection(
|
||||
Data => $Kernel::OM->Get('Kernel::System::ITSMChange::History')->HistoryTypeList( UserID => 1 ) || [],
|
||||
Name => 'EventID',
|
||||
SelectedID => $Param{EventID},
|
||||
Class => 'Modernize W50pc Validate_Required',
|
||||
Translatable => 0,
|
||||
);
|
||||
$Param{RecipientOption} = $LayoutObject->BuildSelection(
|
||||
Data => $Kernel::OM->Get('Kernel::System::ITSMChange::Notification')->RecipientList( UserID => 1 ) || [],
|
||||
Name => 'RecipientIDs',
|
||||
Multiple => 1,
|
||||
SelectedID => $Param{RecipientIDs},
|
||||
Class => 'Modernize W50pc',
|
||||
);
|
||||
|
||||
$LayoutObject->Block(
|
||||
Name => 'OverviewUpdate',
|
||||
Data => \%Param,
|
||||
);
|
||||
|
||||
$LayoutObject->AddJSData(
|
||||
Key => 'OverviewUpdate',
|
||||
Value => 1
|
||||
);
|
||||
|
||||
# add rich text editor
|
||||
if ( $Param{RichText} ) {
|
||||
|
||||
# use height/width defined for this screen
|
||||
my $Config = $ConfigObject->Get("ITSMChange::Frontend::$Self->{Action}");
|
||||
$Param{RichTextHeight} = $Config->{RichTextHeight} || 0;
|
||||
$Param{RichTextWidth} = $Config->{RichTextWidth} || 0;
|
||||
|
||||
$LayoutObject->SetRichTextParameters(
|
||||
Data => \%Param,
|
||||
);
|
||||
}
|
||||
|
||||
# show different widget containers for agent and customer notifications
|
||||
for my $Type (qw(Agent Customer)) {
|
||||
|
||||
# show the widget container for this type
|
||||
$LayoutObject->Block(
|
||||
Name => 'NotificationType',
|
||||
Data => {
|
||||
%Param,
|
||||
Type => $Type,
|
||||
},
|
||||
);
|
||||
|
||||
# get language ids from message parameter, use English if no message is given
|
||||
# make sure English is the first language
|
||||
my @LanguageIDs;
|
||||
if ( IsHashRefWithData( $Param{Message}->{$Type} ) ) {
|
||||
if ( $Param{Message}->{$Type}->{en} ) {
|
||||
push @LanguageIDs, 'en';
|
||||
}
|
||||
LANGUAGEID:
|
||||
for my $LanguageID ( sort keys %{ $Param{Message}->{$Type} } ) {
|
||||
next LANGUAGEID if $LanguageID eq 'en';
|
||||
push @LanguageIDs, $LanguageID;
|
||||
}
|
||||
}
|
||||
else {
|
||||
@LanguageIDs = ('en');
|
||||
}
|
||||
|
||||
my %DefaultUsedLanguages = %{ $ConfigObject->Get('DefaultUsedLanguages') };
|
||||
my %OriginalDefaultUsedLanguages = %DefaultUsedLanguages;
|
||||
|
||||
for my $LanguageID (@LanguageIDs) {
|
||||
|
||||
# format the content according to the content type
|
||||
if ( $Param{RichText} ) {
|
||||
|
||||
# make sure body is rich text (if body is based on config)
|
||||
if (
|
||||
$Param{Message}->{$Type}->{$LanguageID}->{ContentType}
|
||||
&& $Param{Message}->{$Type}->{$LanguageID}->{ContentType} =~ m{text\/plain}xmsi
|
||||
)
|
||||
{
|
||||
$Param{Message}->{$Type}->{$LanguageID}->{Body} = $HTMLUtilsObject->ToHTML(
|
||||
String => $Param{Message}->{$Type}->{$LanguageID}->{Body},
|
||||
);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
# reformat from HTML to plain
|
||||
if (
|
||||
$Param{Message}->{$Type}->{$LanguageID}->{ContentType}
|
||||
&& $Param{Message}->{$Type}->{$LanguageID}->{ContentType} =~ m{text\/html}xmsi
|
||||
&& $Param{Message}->{$Type}->{$LanguageID}->{Body}
|
||||
)
|
||||
{
|
||||
$Param{Message}->{$Type}->{$LanguageID}->{Body} = $HTMLUtilsObject->ToAscii(
|
||||
String => $Param{Message}->{$Type}->{$LanguageID}->{Body},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
# show the notification for this language
|
||||
$LayoutObject->Block(
|
||||
Name => 'NotificationLanguage',
|
||||
Data => {
|
||||
%Param,
|
||||
Subject => $Param{Message}->{$Type}->{$LanguageID}->{Subject} || '',
|
||||
Body => $Param{Message}->{$Type}->{$LanguageID}->{Body} || '',
|
||||
Type => $Type,
|
||||
LanguageID => $LanguageID,
|
||||
Language => $DefaultUsedLanguages{$LanguageID},
|
||||
SubjectServerError => $Param{ $Type . '_' . $LanguageID . '_SubjectServerError' } || '',
|
||||
BodyServerError => $Param{ $Type . '_' . $LanguageID . '_BodyServerError' } || '',
|
||||
},
|
||||
);
|
||||
|
||||
# show the button to remove a notification only if it is not the English notification
|
||||
if ( $LanguageID ne 'en' ) {
|
||||
$LayoutObject->Block(
|
||||
Name => 'NotificationLanguageRemoveButton',
|
||||
Data => {
|
||||
%Param,
|
||||
LanguageID => $Type . '_' . $LanguageID,
|
||||
Type => $Type,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
# delete language from drop-down list because it is already shown
|
||||
delete $DefaultUsedLanguages{$LanguageID};
|
||||
}
|
||||
|
||||
# show language add dropdown
|
||||
$Param{LanguageStrg} = $LayoutObject->BuildSelection(
|
||||
Data => \%DefaultUsedLanguages,
|
||||
Name => $Type . 'LanguageAdd',
|
||||
Class => 'Modernize W50pc LanguageAdd',
|
||||
Translation => 1,
|
||||
PossibleNone => 1,
|
||||
HTMLQuote => 0,
|
||||
);
|
||||
$Param{LanguageOrigStrg} = $LayoutObject->BuildSelection(
|
||||
Data => \%OriginalDefaultUsedLanguages,
|
||||
Name => $Type . 'LanguageOrig',
|
||||
Translation => 1,
|
||||
PossibleNone => 1,
|
||||
HTMLQuote => 0,
|
||||
|
||||
);
|
||||
$LayoutObject->Block(
|
||||
Name => 'NotificationLanguageAdd',
|
||||
Data => {
|
||||
%Param,
|
||||
Type => $Type,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
# show a table of notification rules
|
||||
sub _Overview {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# get layout object
|
||||
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
||||
|
||||
$LayoutObject->Block(
|
||||
Name => 'Overview',
|
||||
Data => \%Param,
|
||||
);
|
||||
|
||||
$LayoutObject->Block( Name => 'ActionList' );
|
||||
$LayoutObject->Block( Name => 'ActionAdd' );
|
||||
|
||||
$LayoutObject->Block(
|
||||
Name => 'OverviewResult',
|
||||
Data => \%Param,
|
||||
);
|
||||
|
||||
$LayoutObject->AddJSData(
|
||||
Key => 'OverviewResult',
|
||||
Value => 1,
|
||||
);
|
||||
|
||||
# get notification object
|
||||
my $NotificationObject = $Kernel::OM->Get('Kernel::System::ITSMChange::Notification');
|
||||
|
||||
my $RuleIDs = $NotificationObject->NotificationRuleList() || [];
|
||||
|
||||
# get valid list
|
||||
my %ValidList = $Kernel::OM->Get('Kernel::System::Valid')->ValidList();
|
||||
for my $RuleID ( @{$RuleIDs} ) {
|
||||
|
||||
my $Data = $NotificationObject->NotificationRuleGet( ID => $RuleID );
|
||||
my $Recipients = join ', ', @{ $Data->{Recipients} || [] };
|
||||
|
||||
$LayoutObject->Block(
|
||||
Name => 'OverviewResultRow',
|
||||
Data => {
|
||||
Valid => $ValidList{ $Data->{ValidID} },
|
||||
%{$Data},
|
||||
Recipients => $Recipients,
|
||||
},
|
||||
);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
1;
|
||||
Reference in New Issue
Block a user