# -- # 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::ITSMConfigItem::Number; use strict; use warnings; our $ObjectManagerDisabled = 1; =head1 NAME Kernel::System::ITSMConfigItem::Number - sub module of Kernel::System::ITSMConfigItem =head1 DESCRIPTION All config item number functions. =head1 PUBLIC INTERFACE =head2 ConfigItemNumberLookup() return config item id or config item number my $ConfigItemNumber = $ConfigItemObject->ConfigItemNumberLookup( ConfigItemID => 123, ); or my $ConfigItemID = $ConfigItemObject->ConfigItemNumberLookup( ConfigItemNumber => '123454321', ); =cut sub ConfigItemNumberLookup { my ( $Self, %Param ) = @_; # check needed stuff if ( !$Param{ConfigItemID} && !$Param{ConfigItemNumber} ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => 'Need ConfigItemID or ConfigItemNumber!', ); return; } if ( $Param{ConfigItemID} ) { # check if result is already cached return $Self->{Cache}->{ConfigItemNumberLookup}->{ID}->{ $Param{ConfigItemID} } if $Self->{Cache}->{ConfigItemNumberLookup}->{ID}->{ $Param{ConfigItemID} }; # ask database $Kernel::OM->Get('Kernel::System::DB')->Prepare( SQL => 'SELECT configitem_number FROM configitem WHERE id = ?', Bind => [ \$Param{ConfigItemID} ], Limit => 1, ); # fetch the result my $ConfigItemNumber; while ( my @Row = $Kernel::OM->Get('Kernel::System::DB')->FetchrowArray() ) { $ConfigItemNumber = $Row[0]; } # cache the result $Self->{Cache}->{ConfigItemNumberLookup}->{ID}->{ $Param{ConfigItemID} } = $ConfigItemNumber; return $ConfigItemNumber; } # check if result is already cached return $Self->{Cache}->{ConfigItemNumberLookup}->{Number}->{ $Param{ConfigItemNumber} } if $Self->{Cache}->{ConfigItemNumberLookup}->{Number}->{ $Param{ConfigItemNumber} }; # ask database $Kernel::OM->Get('Kernel::System::DB')->Prepare( SQL => 'SELECT id FROM configitem WHERE configitem_number = ?', Bind => [ \$Param{ConfigItemNumber} ], Limit => 1, ); # fetch the result my $ConfigItemID; while ( my @Row = $Kernel::OM->Get('Kernel::System::DB')->FetchrowArray() ) { $ConfigItemID = $Row[0]; } # cache the result $Self->{Cache}->{ConfigItemNumberLookup}->{Number}->{ $Param{ConfigItemNumber} } = $ConfigItemID; return $ConfigItemID; } =head2 ConfigItemNumberCreate() create a new config item number my $Number = $ConfigItemObject->ConfigItemNumberCreate( Type => 'AutoIncrement', ClassID => 123, ); =cut sub ConfigItemNumberCreate { my ( $Self, %Param ) = @_; # check needed stuff for my $Argument (qw(Type ClassID)) { if ( !$Param{$Argument} ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => "Need $Argument!", ); return; } } # load backend if ( !$Kernel::OM->Get('Kernel::System::Main')->Require( $Param{Type} ) ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => "Can't load config item number generator backend module $Param{Type}! $@", ); return; } # load backend return if !$Kernel::OM->Get('Kernel::System::Main')->RequireBaseClass( $Param{Type} ); # create number my $Number = $Self->_ConfigItemNumberCreate(%Param); return $Number; } =head2 CurrentCounterGet() return the current counter of a class my $Counter = $ConfigItemObject->CurrentCounterGet( ClassID => 123, Type => 'AutoIncrement', ); =cut sub CurrentCounterGet { my ( $Self, %Param ) = @_; # check needed stuff for my $Argument (qw(ClassID Type)) { if ( !$Param{$Argument} ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => "Need $Argument!", ); return; } } # ask the database $Kernel::OM->Get('Kernel::System::DB')->Prepare( SQL => 'SELECT counter FROM configitem_counter WHERE ' . 'class_id = ? AND counter_type = ?', Bind => [ \$Param{ClassID}, \$Param{Type} ], Limit => 1, ); # fetch the result my $Number; while ( my @Row = $Kernel::OM->Get('Kernel::System::DB')->FetchrowArray() ) { $Number = $Row[0]; } return $Number; } =head2 CurrentCounterSet() set the current counter of a class my $True = $ConfigItemObject->CurrentCounterSet( ClassID => 123, Type => 'AutoIncrement', Counter => '12', ); =cut sub CurrentCounterSet { my ( $Self, %Param ) = @_; # check needed stuff for my $Argument (qw(ClassID Type Counter)) { if ( !$Param{$Argument} ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => "Need $Argument!", ); return; } } # delete old counter $Kernel::OM->Get('Kernel::System::DB')->Do( SQL => 'DELETE FROM configitem_counter WHERE class_id = ?', Bind => [ \$Param{ClassID} ], ); # set new counter $Kernel::OM->Get('Kernel::System::DB')->Do( SQL => 'INSERT INTO configitem_counter ' . '(class_id, counter_type, counter) VALUES (?, ?, ?)', Bind => [ \$Param{ClassID}, \$Param{Type}, \$Param{Counter} ], ); 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