# --
# 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::System::FAQ::Language;
use strict;
use warnings;
our @ObjectDependencies = (
'Kernel::System::Cache',
'Kernel::System::DB',
'Kernel::System::Log',
);
=head1 NAME
Kernel::System::FAQ::Language - sub module of Kernel::System::FAQ
=head1 DESCRIPTION
All FAQ language functions.
=head1 PUBLIC INTERFACE
=head2 LanguageAdd()
add a language
my $Success = $FAQObject->LanguageAdd(
Name => 'Some Language',
UserID => 1,
);
Returns:
$Success = 1; # or undef if language could not be added
=cut
sub LanguageAdd {
my ( $Self, %Param ) = @_;
for my $Argument (qw(Name UserID)) {
if ( !$Param{$Argument} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "Need $Argument!",
);
return;
}
}
return if !$Kernel::OM->Get('Kernel::System::DB')->Do(
SQL => '
INSERT INTO faq_language (name)
VALUES (?)',
Bind => [ \$Param{Name} ],
);
return 1;
}
=head2 LanguageDelete()
Delete a language.
my $DeleteSuccess = $FAQObject->LanguageDelete(
LanguageID => 123,
UserID => 1,
);
Returns
$DeleteSuccess = 1; # or undef if language could not be deleted
=cut
sub LanguageDelete {
my ( $Self, %Param ) = @_;
for my $Attribute (qw(LanguageID UserID)) {
if ( !$Param{$Attribute} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "Need $Attribute!",
);
return;
}
}
# delete the language
return if !$Kernel::OM->Get('Kernel::System::DB')->Do(
SQL => '
DELETE FROM faq_language
WHERE id = ?',
Bind => [ \$Param{LanguageID} ],
);
return 1;
}
=head2 LanguageDuplicateCheck()
check a language
my $Exists = $FAQObject->LanguageDuplicateCheck(
Name => 'Some Name',
LanguageID => 1, # for update
UserID => 1,
);
Returns:
$Exists = 1; # if language already exists, or 0 if does not exist
=cut
sub LanguageDuplicateCheck {
my ( $Self, %Param ) = @_;
if ( !$Param{UserID} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "Need UserID!",
);
return;
}
# build SQL
my @Bind = ( \$Param{Name} );
my $SQL = '
SELECT id
FROM faq_language
WHERE name = ?';
if ( defined $Param{LanguageID} ) {
push @Bind, \$Param{LanguageID};
$SQL .= " AND id != ?";
}
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
# prepare SQL statement
return if !$DBObject->Prepare(
SQL => $SQL,
Limit => 1,
Bind => \@Bind,
);
# fetch the result
my $Exists;
while ( my @Row = $DBObject->FetchrowArray() ) {
$Exists = 1;
}
return $Exists;
}
=head2 LanguageGet()
get a language details as a hash
my %Language = $FAQObject->LanguageGet(
LanguageID => 1,
UserID => 1,
);
Returns:
%Language = (
LanguageID => '1',
Name => 'en',
);
=cut
sub LanguageGet {
my ( $Self, %Param ) = @_;
for my $Argument (qw(LanguageID UserID)) {
if ( !$Param{$Argument} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "Need $Argument!",
);
return;
}
}
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
# SQL
return if !$DBObject->Prepare(
SQL => '
SELECT id, name
FROM faq_language
WHERE id = ?',
Bind => [ \$Param{LanguageID} ],
Limit => 1,
);
my %Data;
while ( my @Row = $DBObject->FetchrowArray() ) {
%Data = (
LanguageID => $Row[0],
Name => $Row[1],
);
}
return %Data;
}
=head2 LanguageList()
get the language list as a hash
my %Languages = $FAQObject->LanguageList(
UserID => 1,
);
Returns:
%Languages = (
1 => 'en',
2 => 'de',
3 => 'es',
);
=cut
sub LanguageList {
my ( $Self, %Param ) = @_;
if ( !$Param{UserID} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "Need UserID!",
);
return;
}
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
# build SQL
return if !$DBObject->Prepare(
SQL => '
SELECT id, name
FROM faq_language',
);
# fetch the result
my %List;
while ( my @Row = $DBObject->FetchrowArray() ) {
$List{ $Row[0] } = $Row[1];
}
return %List;
}
=head2 LanguageLookup()
This method does a lookup for a FAQ language.
If a language id is given, it returns the name of the language.
If the name of the language is given, the language id is returned.
my $LanguageName = $FAQObject->LanguageLookup(
LanguageID => 1,
);
my $LanguageID = $FAQObject->LanguageLookup(
Name => 'en',
);
Returns:
$LanguageName = 'en';
$LanguageID = 1;
=cut
sub LanguageLookup {
my ( $Self, %Param ) = @_;
# check if both parameters are given
if ( $Param{LanguageID} && $Param{Name} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => 'Need LanguageID or Name - not both!',
);
return;
}
# check if both parameters are not given
if ( !$Param{LanguageID} && !$Param{Name} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => 'Need LanguageID or Name - none is given!',
);
return;
}
# check if LanguageID is a number
if ( $Param{LanguageID} && $Param{LanguageID} !~ m{ \A \d+ \z }xms ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "LanguageID must be a number! (LanguageID: $Param{LanguageID})",
);
return;
}
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
# prepare SQL statements
if ( $Param{LanguageID} ) {
return if !$DBObject->Prepare(
SQL => '
SELECT name
FROM faq_language
WHERE id = ?',
Bind => [ \$Param{LanguageID} ],
Limit => 1,
);
}
elsif ( $Param{Name} ) {
return if !$DBObject->Prepare(
SQL => '
SELECT id
FROM faq_language
WHERE name = ?',
Bind => [ \$Param{Name} ],
Limit => 1,
);
}
# fetch the result
my $Lookup;
while ( my @Row = $DBObject->FetchrowArray() ) {
$Lookup = $Row[0];
}
return $Lookup;
}
=head2 LanguageUpdate()
update a language
my $Success = $FAQObject->LanguageUpdate(
LanguageID => 1,
Name => 'de',
UserID => 1,
);
Returns:
$Success = 1; # or undef if language could not be updated
=cut
sub LanguageUpdate {
my ( $Self, %Param ) = @_;
for my $Argument (qw(LanguageID Name UserID)) {
if ( !$Param{$Argument} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "Need $Argument!",
);
return;
}
}
my $DBObject = $Kernel::OM->Get('Kernel::System::DB');
# build SQL
return if !$DBObject->Do(
SQL => '
UPDATE faq_language
SET name = ?
WHERE id = ?',
Bind => [ \$Param{Name}, \$Param{LanguageID} ],
);
# delete all cache, as FAQGet() will be also affected.
$Kernel::OM->Get('Kernel::System::Cache')->CleanUp(
Type => 'FAQ',
);
return 1;
}
1;
=head1 TERMS AND CONDITIONS
This software is part of the OTRS project (L).
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 L.
=cut