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

552 lines
16 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::AgentFAQLanguage;
use strict;
use warnings;
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 $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
# Permission check.
if ( !$Self->{AccessRw} ) {
return $LayoutObject->NoPermission(
Message => Translatable('You need rw permission!'),
WithHeader => 'yes',
);
}
my %GetParam;
my $MultiLanguage = $Kernel::OM->Get('Kernel::Config')->Get('FAQ::MultiLanguage');
my $FAQObject = $Kernel::OM->Get('Kernel::System::FAQ');
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
# ------------------------------------------------------------ #
# Change
# ------------------------------------------------------------ #
if ( $Self->{Subaction} eq 'Change' && $MultiLanguage ) {
# Get the LanguageID
my $LanguageID = $ParamObject->GetParam( Param => 'LanguageID' ) || '';
# Check required parameters.
if ( !$LanguageID ) {
return $LayoutObject->ErrorScreen(
Message => Translatable('No LanguageID is given!'),
Comment => Translatable('Please contact the administrator.'),
);
}
my %LanguageData = $FAQObject->LanguageGet(
LanguageID => $LanguageID,
UserID => $Self->{UserID},
);
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
$Self->_Edit(
Action => 'Change',
%LanguageData,
%GetParam,
);
$Output .= $LayoutObject->Output(
TemplateFile => 'AgentFAQLanguage',
Data => {
%Param,
},
);
$Output .= $LayoutObject->Footer();
return $Output;
}
# ------------------------------------------------------------ #
# Change action
# ------------------------------------------------------------ #
elsif ( $Self->{Subaction} eq 'ChangeAction' && $MultiLanguage ) {
# Challenge token check for write action.
$LayoutObject->ChallengeTokenCheck();
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
my %Error;
for my $ParamName (qw(LanguageID Name)) {
# Store needed parameters in %GetParam to make it re-loadable
$GetParam{$ParamName} = $ParamObject->GetParam( Param => $ParamName );
if ( !$GetParam{$ParamName} ) {
# Add validation class and server error error class.
$Error{ $ParamName . 'ServerError' } = 'ServerError';
# Add server error string for category name field.
if ( $ParamName eq 'Name' ) {
$Error{NameServerErrorMessage} = Translatable('The name is required!');
}
}
}
if ( $Param{Name} ) {
# check for duplicate language name
my $LanguageExistsAlready = $FAQObject->LanguageDuplicateCheck(
Name => $GetParam{Name},
LanguageID => $GetParam{LanguageID},
UserID => $Self->{UserID},
);
if ($LanguageExistsAlready) {
$Error{NameServerError} = 'ServerError';
$Error{NameServerErrorMessage} = Translatable('This language already exists!');
}
}
if (%Error) {
$Self->_Edit(
Action => 'Change',
%GetParam,
%Error,
);
$Output .= $LayoutObject->Output(
TemplateFile => 'AgentFAQLanguage',
Data => \%Param,
);
$Output .= $LayoutObject->Footer();
return $Output;
}
# Update the language.
my $LanguageUpdateSuccessful = $FAQObject->LanguageUpdate(
%GetParam,
UserID => $Self->{UserID},
);
if ( !$LanguageUpdateSuccessful ) {
return $LayoutObject->ErrorScreen();
}
return $LayoutObject->Redirect( OP => "Action=$Self->{Action};Notification=Update" );
}
# ------------------------------------------------------------ #
# Add
# ------------------------------------------------------------ #
elsif ( $Self->{Subaction} eq 'Add' && $MultiLanguage ) {
# Get the new name.
$GetParam{Name} = $ParamObject->GetParam( Param => 'Name' );
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
$Self->_Edit(
Action => 'Add',
%GetParam,
);
$Output .= $LayoutObject->Output(
TemplateFile => 'AgentFAQLanguage',
Data => {
%Param,
},
);
$Output .= $LayoutObject->Footer();
return $Output;
}
# ------------------------------------------------------------ #
# Add action
# ------------------------------------------------------------ #
elsif ( $Self->{Subaction} eq 'AddAction' && $MultiLanguage ) {
# Challenge token check for write action.
$LayoutObject->ChallengeTokenCheck();
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
# Get the name.
$GetParam{Name} = $ParamObject->GetParam( Param => 'Name' );
my %Error;
# check for name
if ( !$GetParam{Name} ) {
$Error{NameServerError} = 'ServerError';
$Error{NameServerErrorMessage} = Translatable('The name is required!');
}
else {
# Check for duplicate language name.
my $LanguageExistsAlready = $FAQObject->LanguageDuplicateCheck(
Name => $GetParam{Name},
LanguageID => $GetParam{LanguageID},
UserID => $Self->{UserID},
);
if ($LanguageExistsAlready) {
$Error{NameServerError} = 'ServerError';
$Error{NameServerErrorMessage} = Translatable('This language already exists!');
}
}
if (%Error) {
$Self->_Edit(
Action => 'Add',
%GetParam,
%Error,
);
$Output .= $LayoutObject->Output(
TemplateFile => 'AgentFAQLanguage',
Data => \%Param,
);
$Output .= $LayoutObject->Footer();
return $Output;
}
# Add the new language.
my $LanguageAddSuccessful = $FAQObject->LanguageAdd(
%GetParam,
UserID => $Self->{UserID},
);
if ( !$LanguageAddSuccessful ) {
return $LayoutObject->ErrorScreen();
}
return $LayoutObject->Redirect( OP => "Action=$Self->{Action};Notification=Add" );
}
# ------------------------------------------------------------ #
# Delete
# ------------------------------------------------------------ #
elsif ( $Self->{Subaction} eq 'Delete' && $MultiLanguage ) {
# Get the LanguageID.
my $LanguageID = $ParamObject->GetParam( Param => 'LanguageID' ) || '';
if ( !$LanguageID ) {
return $LayoutObject->ErrorScreen(
Message => Translatable('No LanguageID is given!'),
Comment => Translatable('Please contact the administrator.'),
);
}
my %LanguageData = $FAQObject->LanguageGet(
LanguageID => $LanguageID,
UserID => $Self->{UserID},
);
if ( !%LanguageData ) {
return $LayoutObject->ErrorScreen();
}
my @AffectedItems = $FAQObject->FAQSearch(
LanguageIDs => [$LanguageID],
UserID => 1,
);
$LayoutObject->Block(
Name => 'Delete',
Data => {%LanguageData},
);
# Set the dialog type. As default, the dialog will have 2 buttons: Yes and No.
my $DialogType = 'Confirmation';
# Display list of affected FAQ articles.
if (@AffectedItems) {
# Set the dialog type to have only 1 button: OK.
$DialogType = 'Message';
$LayoutObject->Block(
Name => 'AffectedItems',
Data => {},
);
ITEMID:
for my $ItemID (@AffectedItems) {
my %FAQData = $FAQObject->FAQGet(
ItemID => $ItemID,
ItemFields => 0,
UserID => $Self->{UserID},
);
next ITEMID if !%FAQData;
$LayoutObject->Block(
Name => 'AffectedItemsRow',
Data => {
%FAQData,
%Param,
},
);
}
}
else {
$LayoutObject->Block(
Name => 'NoAffectedItems',
Data => {%LanguageData},
);
}
my $Output = $LayoutObject->Output(
TemplateFile => 'AgentFAQLanguage',
Data => {},
);
# Build the returned data structure.
my %Data = (
HTML => $Output,
DialogType => $DialogType,
);
# Return JSON-String because of AJAX-Mode.
my $OutputJSON = $LayoutObject->JSONEncode( Data => \%Data );
return $LayoutObject->Attachment(
ContentType => 'application/json; charset=' . $LayoutObject->{Charset},
Content => $OutputJSON,
Type => 'inline',
NoCache => 1,
);
}
# ------------------------------------------------------------ #
# Delete action
# ------------------------------------------------------------ #
elsif ( $Self->{Subaction} eq 'DeleteAction' && $MultiLanguage ) {
# Get the LanguageID.
my $LanguageID = $ParamObject->GetParam( Param => 'LanguageID' ) || '';
if ( !$LanguageID ) {
return $LayoutObject->ErrorScreen(
Message => Translatable('No LanguageID is given!'),
Comment => Translatable('Please contact the administrator.'),
);
}
my %LanguageData = $FAQObject->LanguageGet(
LanguageID => $LanguageID,
UserID => $Self->{UserID},
);
if ( !%LanguageData ) {
return $LayoutObject->ErrorScreen();
}
# Delete the language.
my $CouldDeleteLanguage = $FAQObject->LanguageDelete(
LanguageID => $LanguageID,
UserID => $Self->{UserID},
);
if ($CouldDeleteLanguage) {
# Redirect to explorer, when the deletion was successful.
return $LayoutObject->Redirect(
OP => "Action=AgentFAQLanguage",
);
}
else {
# Show error message, when delete failed.
return $LayoutObject->ErrorScreen(
Message => $LayoutObject->{LanguageObject}->Translate(
'Was not able to delete the language %s!',
$LanguageID,
),
Comment => Translatable('Please contact the administrator.'),
);
}
}
# ---------------------------------------------------------- #
# Overview
# ---------------------------------------------------------- #
else {
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
my $Notification = $ParamObject->GetParam( Param => 'Notification' ) || '';
my %NotificationText = (
Update => Translatable('FAQ language updated!'),
Add => Translatable('FAQ language added!'),
);
if ( $Notification && $NotificationText{$Notification} ) {
$Output .= $LayoutObject->Notify( Info => $NotificationText{$Notification} );
}
$Self->_Overview();
$Output .= $LayoutObject->Output(
TemplateFile => 'AgentFAQLanguage',
Data => {
%Param,
%GetParam,
},
);
$Output .= $LayoutObject->Footer();
return $Output;
}
}
sub _Edit {
my ( $Self, %Param ) = @_;
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
$LayoutObject->Block(
Name => 'Overview',
Data => \%Param,
);
$LayoutObject->Block(
Name => 'ActionList',
Data => {},
);
$LayoutObject->Block(
Name => 'ActionOverview',
Data => {},
);
$LayoutObject->Block(
Name => 'OverviewUpdate',
Data => \%Param,
);
if ( $Param{Action} eq 'Change' ) {
$LayoutObject->Block(
Name => 'HeaderEdit',
Data => {},
);
}
else {
$LayoutObject->Block(
Name => 'HeaderAdd',
Data => {},
);
}
return 1;
}
sub _Overview {
my ( $Self, %Param ) = @_;
my $Output = '';
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
$LayoutObject->Block(
Name => 'Overview',
Data => {},
);
my $MultiLanguage = $Kernel::OM->Get('Kernel::Config')->Get('FAQ::MultiLanguage');
if ($MultiLanguage) {
$LayoutObject->Block(
Name => 'ActionList',
Data => {},
);
$LayoutObject->Block(
Name => 'ActionAdd',
Data => {},
);
$LayoutObject->Block(
Name => 'OverviewResult',
Data => {},
);
my $FAQObject = $Kernel::OM->Get('Kernel::System::FAQ');
my %Languages = $FAQObject->LanguageList(
UserID => $Self->{UserID},
);
my %JSData;
# If there are any languages, they are shown.
if (%Languages) {
for my $LanguageID ( sort { $Languages{$a} cmp $Languages{$b} } keys %Languages ) {
# Create structure for JS.
$JSData{$LanguageID} = {
ElementID => 'DeleteLanguageID' . $LanguageID,
ElementSelector => '#DeleteLanguageID' . $LanguageID,
DialogContentQueryString => 'Action=AgentFAQLanguage;Subaction=Delete;LanguageID=' . $LanguageID,
ConfirmedActionQueryString => 'Action=AgentFAQLanguage;Subaction=DeleteAction;LanguageID='
. $LanguageID,
DialogTitle => $LayoutObject->{LanguageObject}->Translate(
'Delete Language %s',
$Languages{$LanguageID},
),
};
# Get languages result.
my %LanguageData = $FAQObject->LanguageGet(
LanguageID => $LanguageID,
UserID => $Self->{UserID},
);
$LayoutObject->Block(
Name => 'OverviewResultRow',
Data => {%LanguageData},
);
}
$LayoutObject->AddJSData(
Key => 'FAQData',
Value => \%JSData,
);
}
# Otherwise a no data found message is displayed.
else {
$LayoutObject->Block(
Name => 'NoDataFoundMsg',
Data => {},
);
}
}
else {
$LayoutObject->Block(
Name => 'Disabled',
Data => {},
);
}
return 1;
}
1;