QueueService.pm 3.94 KB
# --
# Kernel/System/QueueService.pm - core module
# Manages Services association to queues
#
# Copyright (C) 2014-2018 - SeTIC - UFSC - http://setic.ufsc.br/
#
# Version 2016-06-01 - Adjustments for OTRS 4
# Version 2018-01-03 - Adjustments for OTRS 6
#
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (AGPL). If you
# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
# --
#
package Kernel::System::QueueService;

use strict;
use warnings;
use Data::Dumper;

our @ObjectDependencies = (
	"Kernel::Output::HTML::Layout",
	"Kernel::System::DB"
);

sub new {
	my ( $Type, %Param ) = @_;

	# allocate new hash for object
	my $Self = {%Param};
	bless( $Self, $Type );

	return $Self;
}

=item GetServiceList()

Get list of services for a queue

    my %{service_id}{QueueName} = $QueueServiceObject->GetServiceList(
        QueueID => 123,
    );

=cut
sub GetServiceList {
	my ( $Self, %Param ) = @_;
	my %result = ();

	for (qw(QueueID)) {
		if ( !$Param{$_} ) {
			$Kernel::OM->Get("Kernel::Output::HTML::Layout")->FatalError( Message => Dumper( \%Param ) . "got no $_!" );
		}
	}

	$Kernel::OM->Get("Kernel::System::DB")->Prepare(
		SQL => "
		select  
			a.service_id id,
			b.name Name 
		from 
			queue_service a 
			inner join service b on(b.id = a.service_id) 
		where 
			a.queue_id = ?",
		Bind => [ \$Param{QueueID} ]
	);

	while ( my @row = $Kernel::OM->Get("Kernel::System::DB")->FetchrowArray() ) {		
		$result{ $row[0] } = $row[1];
	}

	return %result;
}

=item GetQueueList()

Get list of queues for a service

    my %{queue_id}{QueueName} = $QueueServiceObject->GetQueueList(
        ServiceID => 123,
    );

=cut
sub GetQueueList {
	my ( $Self, %Param ) = @_;
	my %result = ();

	for (qw(ServiceID)) {
		if ( !$Param{$_} ) {
			$Kernel::OM->Get("Kernel::Output::HTML::Layout")->FatalError( Message => Dumper( \%Param ) . "got no $_!" );
		}
	}

	$Kernel::OM->Get("Kernel::System::DB")->Prepare(
		SQL => "
		select  
			a.queue_id id,
			b.name Name 
		from 
			queue_service a 
			inner join queue b on(b.id = a.queue_id) 
		where 
			a.service_id = ?",
		Bind => [ \$Param{ServiceID} ]
	);

	while ( my @row = $Kernel::OM->Get("Kernel::System::DB")->FetchrowArray() ) {		
		$result{ $row[0] } = $row[1];
	}

	return %result;
}


=item SetQueueServices()

Defines the list of services for a queue

    $QueueServiceObject->SetQueueServices(
        QueueID => 123,
        Services => @ServiceIDs
    );

=cut
sub SetQueueServices {
	my ( $Self, %Param ) = @_;
	my %result = ();

	for (qw(QueueID Services)) {
		if ( !$Param{$_} ) {
			$Kernel::OM->Get("Kernel::Output::HTML::Layout")->FatalError( Message => Dumper( \%Param ) . "got no $_!" );
		}
	}
	
	my $QueueID = $Param{"QueueID"};
	my @Services = @{$Param{"Services"}};
	
	$Kernel::OM->Get("Kernel::System::DB")->Do(
		SQL  => "delete from queue_service where queue_id = ?",
		Bind => [ \$Param{QueueID} ]
	);

	for my $service (@Services) {
		$Kernel::OM->Get("Kernel::System::DB")->Do(
			SQL  => "insert into queue_service(queue_id,service_id) values (?,?)",
			Bind => [\$Param{QueueID}, \$service]
		);
		
	}	
}

=item SetServiceQueues()

Defines the list of services for a queue

    $QueueServiceObject->SetServiceQueues(
        ServiceID => 123,
        Queues => @ServiceIDs
    );

=cut
sub SetServiceQueues {
	my ( $Self, %Param ) = @_;
	my %result = ();

	for (qw(ServiceID Queues)) {
		if ( !$Param{$_} ) {
			$Kernel::OM->Get("Kernel::Output::HTML::Layout")->FatalError( Message => Dumper( \%Param ) . "got no $_!" );
		}
	}
	
	my $ServiceID = $Param{"ServiceID"};
	my @Queues = @{$Param{"Queues"}};
	
	$Kernel::OM->Get("Kernel::System::DB")->Do(
		SQL  => "delete from queue_service where service_id = ?",
		Bind => [ \$Param{ServiceID} ]
	);

	for my $queue (@Queues) {
		$Kernel::OM->Get("Kernel::System::DB")->Do(
			SQL  => "insert into queue_service(queue_id,service_id) values (?,?)",
			Bind => [\$queue, \$Param{ServiceID}]
		);
		
	}	
}


1;