From 0020e11e3128f96926d85d5981cbbb8e76e5167a Mon Sep 17 00:00:00 2001 From: Rodrigo Goncalves Date: Fri, 5 Jan 2018 08:29:45 -0200 Subject: [PATCH] Suporte para OTRS 6 --- .gitignore | 1 + CreateOpm.sh | 2 +- Kernel/Config/Files/QueueService.xml | 27 --------------------------- Kernel/Language/pt_BR_QueueService.pm | 26 -------------------------- Kernel/Modules/QueueService.pm | 208 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Kernel/Output/HTML/Templates/Standard/QueueService.tt | 86 -------------------------------------------------------------------------------------- Kernel/Output/HTML/Templates/Standard/QueueServiceChange.tt | 103 ------------------------------------------------------------------------------------------------------- Kernel/System/QueueService.pm | 188 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- QueueService.sopm | 44 -------------------------------------------- src/Kernel/Config/Files/XML/QueueService.xml | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Kernel/Language/pt_BR_QueueService.pm | 28 ++++++++++++++++++++++++++++ src/Kernel/Modules/QueueService.pm | 219 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Kernel/Output/HTML/Templates/Standard/QueueService.tt | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Kernel/Output/HTML/Templates/Standard/QueueServiceChange.tt | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Kernel/System/QueueService.pm | 190 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/QueueService.sopm | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/var/httpd/htdocs/js/QueueService.js | 24 ++++++++++++++++++++++++ 17 files changed, 793 insertions(+), 683 deletions(-) create mode 100644 .gitignore delete mode 100644 Kernel/Config/Files/QueueService.xml delete mode 100644 Kernel/Language/pt_BR_QueueService.pm delete mode 100644 Kernel/Modules/QueueService.pm delete mode 100644 Kernel/Output/HTML/Templates/Standard/QueueService.tt delete mode 100644 Kernel/Output/HTML/Templates/Standard/QueueServiceChange.tt delete mode 100644 Kernel/System/QueueService.pm delete mode 100755 QueueService.sopm create mode 100755 src/Kernel/Config/Files/XML/QueueService.xml create mode 100644 src/Kernel/Language/pt_BR_QueueService.pm create mode 100644 src/Kernel/Modules/QueueService.pm create mode 100644 src/Kernel/Output/HTML/Templates/Standard/QueueService.tt create mode 100644 src/Kernel/Output/HTML/Templates/Standard/QueueServiceChange.tt create mode 100644 src/Kernel/System/QueueService.pm create mode 100755 src/QueueService.sopm create mode 100755 src/var/httpd/htdocs/js/QueueService.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a261f29 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +dist/* diff --git a/CreateOpm.sh b/CreateOpm.sh index 44ce5bf..864a316 100755 --- a/CreateOpm.sh +++ b/CreateOpm.sh @@ -1,5 +1,5 @@ #!/bin/bash LOCAL="$PWD" cd /opt/otrs -bin/otrs.Console.pl Dev::Package::Build "$LOCAL"/QueueService.sopm "$LOCAL"/ +bin/otrs.Console.pl Dev::Package::Build "$LOCAL"/src/QueueService.sopm "$LOCAL"/dist/ cd $LOCAL diff --git a/Kernel/Config/Files/QueueService.xml b/Kernel/Config/Files/QueueService.xml deleted file mode 100644 index 1f73a28..0000000 --- a/Kernel/Config/Files/QueueService.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - Frontend module registration for the service per queue - Registro do módulo de serviços por fila - Ticket - Frontend::Admin::ModuleRegistration - - - admin - Admin - Services per queue - Serviços por fila - Admin - - Kernel::Output::HTML::NavBar::ModuleAdmin - Services per queue - Serviços por fila - Create and manages services per queue - Cria e gerencia serviços por fila - Ticket - 900 - - - - - diff --git a/Kernel/Language/pt_BR_QueueService.pm b/Kernel/Language/pt_BR_QueueService.pm deleted file mode 100644 index 871b7fe..0000000 --- a/Kernel/Language/pt_BR_QueueService.pm +++ /dev/null @@ -1,26 +0,0 @@ -# -- -# Kernel/Modules/pt_BR_QueueService.pm - module to associate services per queue -# -# Copyright (C) 2014 - SeTIC - UFSC - http://setic.ufsc.br/ -# Version 01/06/2015 - Adjusts for OTRS 4 -# -# -- -# 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::Language::pt_BR_QueueService; - -use strict; -use warnings; -use utf8; - -sub Data { - my $Self = shift; - $Self->{Translation}->{'Services per queue'} = 'Serviços por fila'; - $Self->{Translation}->{'Create and manages services per queue'} = 'Cria e gerencia serviços por fila'; - - return 1; -} - -1; \ No newline at end of file diff --git a/Kernel/Modules/QueueService.pm b/Kernel/Modules/QueueService.pm deleted file mode 100644 index 37a9a0c..0000000 --- a/Kernel/Modules/QueueService.pm +++ /dev/null @@ -1,208 +0,0 @@ -# -- -# Kernel/Modules/QueueService.pm - frontend module -# -# Copyright (C) 2014 - SeTIC - UFSC - http://setic.ufsc.br/ -# Version 01/06/2015 - Adjusts for OTRS 4 -# -# Autor: Carlos Rebelato, Rodrigo Gonçalves -# Data.: 19/02/2014 - Versão inicial -# -package Kernel::Modules::QueueService; - -use strict; -use warnings; -use Data::Dumper; -require Kernel::System::QueueService; -require Kernel::System::Service; -require Kernel::System::Queue; - -our @ObjectDependencies = ( - "Kernel::System::Web::Request", # Old ParamObject - "Kernel::System::DB", - "Kernel::System::Ticket", - "Kernel::Output::HTML::Layout", # Old LayoutObject - "Kernel::System::Log", - "Kernel::System::Queue", - "Kernel::Config", - "Kernel::System::Encode", - "Kernel::System::Main", - "Kernel::System::QueueService", # Ask direct to manager - "Kernel::System::Service" # Ask direct to manager -); - -sub new { - my ( $Type, %Param ) = @_; - - # allocate new hash for object - my $Self = {%Param}; - bless( $Self, $Type ); - - return $Self; -} - -sub Run { - my ( $Self, %Param ) = @_; - - my $ParamObject = $Kernel::OM->Get("Kernel::System::Web::Request"); - - my $SubAction = $ParamObject->GetParam( Param => "Subaction" ); - - if ( $SubAction eq "ServiceEdit" ) { - return $Self->ShowChangeService( ID => $ParamObject->GetParam( Param => "ID" ) ); - } - elsif ( $SubAction eq "QueueEdit" ) { - return $Self->ShowChangeQueue( ID => $ParamObject->GetParam( Param => "ID" ) ); - } - elsif ( $SubAction eq "ChangeService" ) { - $Self->ChangeService(); - return $Self->ShowOverview(); - } - elsif ( $SubAction eq "ChangeQueue" ) { - $Self->ChangeQueue(); - return $Self->ShowOverview(); - } - else { - return $Self->ShowOverview(); - } -} - -sub ShowOverview() { - my ( $Self, %Param ) = @_; - my %Data = (); - - my %Queues = $Kernel::OM->Get("Kernel::System::Queue")->QueueList( Valid => 1 ); - my %Services = $Kernel::OM->Get("Kernel::System::Service")->ServiceList( UserID => 1 ); - my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout"); - - foreach my $service ( sort { uc( $Services{$a} ) cmp uc( $Services{$b} ) } keys %Services ) { - $LayoutObject->Block( - Name => 'ListService', - Data => { - ServiceID => $service, - ServiceName => $Services{$service}, - } - ); - } - - foreach my $queue ( sort { uc( $Queues{$a} ) cmp uc( $Queues{$b} ) } keys %Queues ) { - $LayoutObject->Block( - Name => 'ListQueue', - Data => { - QueueID => $queue, - QueueName => $Queues{$queue}, - } - ); - } - - my $Output = $LayoutObject->Header( Title => $LayoutObject->{LanguageObject}->Get("Services per queue") ); - $Output .= $LayoutObject->NavigationBar(); - $Output .= $LayoutObject->Output( - Data => \%Data, - TemplateFile => 'QueueService' - ); - - $Output .= $LayoutObject->Footer(); - return $Output; -} - -sub ShowChangeService() { - my ( $Self, %Param ) = @_; - my %Data = (); - my %Service = $Kernel::OM->Get("Kernel::System::Service")->ServiceGet( ServiceID => $Param{ID}, UserID => 1 ); - my %QueuesService = $Kernel::OM->Get("Kernel::System::QueueService")->GetQueueList( ServiceID => $Param{ID} ); - my %Queues = $Kernel::OM->Get("Kernel::System::Queue")->QueueList( Valid => 1 ); - my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout"); - - $Data{Type} = "Queue"; - $Data{Filter} = "Service"; - $Data{VisibleNeType} = "Service"; - $Data{Name} = $Service{Name}; - $Data{ID} = $Service{ServiceID}; - - $LayoutObject->Block( - Name => 'ChangeHeader', - Data => \%Data - ); - - foreach my $queue ( sort { uc( $Queues{$a} ) cmp uc( $Queues{$b} ) } keys %Queues ) { - $LayoutObject->Block( - Name => 'ChangeRow', - Data => { - Type => "Queue", - ID => $queue, - Name => $Queues{$queue}, - Selected => ( $QueuesService{$queue} ? 'checked="checked"' : '' ) - } - ); - } - - my $Output = - $LayoutObject->Header( Title => $LayoutObject->{LanguageObject}->Get("Services per queue") ); - $Output .= $LayoutObject->NavigationBar(); - $Output .= $LayoutObject->Output( - Data => \%Data, - TemplateFile => 'QueueServiceChange' - ); - - $Output .= $LayoutObject->Footer(); - return $Output; -} - -sub ShowChangeQueue() { - my ( $Self, %Param ) = @_; - my %Data = (); - my %Queue = $Kernel::OM->Get("Kernel::System::Queue")->QueueGet( ID => $Param{ID} ); - my %ServicesQueue = $Kernel::OM->Get("Kernel::System::QueueService")->GetServiceList( QueueID => $Param{ID} ); - my %Services = $Kernel::OM->Get("Kernel::System::Service")->ServiceList( UserID => 1 ); - my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout"); - - $Data{Type} = "Service"; - $Data{Filter} = "Queue"; - $Data{VisibleNeType} = "Queue"; - $Data{Name} = $Queue{Name}; - $Data{ID} = $Queue{QueueID}; - - $LayoutObject->Block( - Name => 'ChangeHeader', - Data => \%Data - ); - - foreach my $service ( sort { uc( $Services{$a} ) cmp uc( $Services{$b} ) } keys %Services ) { - $LayoutObject->Block( - Name => 'ChangeRow', - Data => { - Type => "Service", - ID => $service, - Name => $Services{$service}, - Selected => ( $ServicesQueue{$service} ? 'checked="checked"' : '' ) - } - ); - } - - my $Output = - $LayoutObject->Header( Title => $LayoutObject->{LanguageObject}->Get("Services per queue") ); - $Output .= $LayoutObject->NavigationBar(); - $Output .= $LayoutObject->Output( - Data => \%Data, - TemplateFile => 'QueueServiceChange' - ); - - $Output .= $LayoutObject->Footer(); - return $Output; - -} - -sub ChangeService() { - my ( $Self, %Param ) = @_; - my @queueIDs = $Kernel::OM->Get("Kernel::System::Web::Request")->GetArray( Param => 'Queue' ); - my $id = $Kernel::OM->Get("Kernel::System::Web::Request")->GetParam( Param => 'ID' ); - $Kernel::OM->Get("Kernel::System::QueueService")->SetServiceQueues(ServiceID => $id, Queues => \@queueIDs); -} - -sub ChangeQueue() { - my ( $Self, %Param ) = @_; - my @serviceIDs = $Kernel::OM->Get("Kernel::System::Web::Request")->GetArray( Param => 'Service' ); - my $id = $Kernel::OM->Get("Kernel::System::Web::Request")->GetParam( Param => 'ID' ); - $Kernel::OM->Get("Kernel::System::QueueService")->SetQueueServices(QueueID => $id, Services => \@serviceIDs); - -} \ No newline at end of file diff --git a/Kernel/Output/HTML/Templates/Standard/QueueService.tt b/Kernel/Output/HTML/Templates/Standard/QueueService.tt deleted file mode 100644 index 17cae1c..0000000 --- a/Kernel/Output/HTML/Templates/Standard/QueueService.tt +++ /dev/null @@ -1,86 +0,0 @@ -# -- -# Kernel/Output/HTML/Standard/QueueService.tt - overview -# Copyright (C) (2014) SeTIC - UFSC - http://setic.ufsc.br/ -# Version 06/01/2015 - Adjusts for OTRS 4 -# -# 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. -# -- -
-

[% Translate("Services per queue") | html %]

- -
- -
-
-

[% Translate("Actions") | html %]

-
- -
- -[% RenderBlockStart("serviceFilter") %] -
-
-

-
-
- -
-
-[% RenderBlockEnd("serviceFilter") %] -[% RenderBlockStart("queueFilter") %] -
-
-

-
-
- -
-
-[% RenderBlockEnd("queueFilter") %] -
- -
-
- -
-

[% Translate("Overview") | html %]

-
-
-
-
    -
  • [% Translate("Services") | html %]
  • - -[% RenderBlockStart("ListService") %] -
  • [% Data.ServiceName | html %]
  • -[% RenderBlockEnd("ListService") %] -
-
-
-
    -
  • [% Translate("Queues") | html %]
  • - -[% RenderBlockStart("ListQueue") %] -
  • [% Data.QueueName | html %]
  • -[% RenderBlockEnd("ListQueue") %] -
-
-
-
- - -[% WRAPPER JSOnDocumentComplete %] - -[% END %] - - \ No newline at end of file diff --git a/Kernel/Output/HTML/Templates/Standard/QueueServiceChange.tt b/Kernel/Output/HTML/Templates/Standard/QueueServiceChange.tt deleted file mode 100644 index 5bb48de..0000000 --- a/Kernel/Output/HTML/Templates/Standard/QueueServiceChange.tt +++ /dev/null @@ -1,103 +0,0 @@ -# -- -# Kernel/Output/HTML/Standard/QueueServiceChange.tt - edit -# Copyright (C) (2014) SeTIC - UFSC - http://setic.ufsc.br/ -# Version 06/01/2015 - Adjusts for OTRS 4 -# -# 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. -# -- -
-

[% Translate("Services and queues") | html %]

-
-
-
-

[% Translate("Actions") | html %]

-
- -
-
-
-

- -

-
-
- -
-
-
- -
-
-
-

-[% RenderBlockStart("ChangeHeaderService") %] - [% Translate("Select queues for the service") | html %] -[% RenderBlockEnd("ChangeHeaderService") %] -[% RenderBlockStart("ChangeHeaderQueue") %] - [% Translate("Select services for the queue") | html %] -[% RenderBlockEnd("ChangeHeaderQueue") %] - [% Data.Name | html %] -

-
-
-
- - - - - - - -[% RenderBlockStart("ChangeHeader") %] - -[% WRAPPER JSOnDocumentComplete %] - -[% END %] -[% RenderBlockEnd("ChangeHeader") %] - - - -[% RenderBlockStart("ChangeRow") %] - - - - -[% RenderBlockEnd("ChangeRow") %] - -
[% Translate(Data.VisibleNeType) | html %] - - [% Translate("Active") | html %] -
[% Data.Name | html %] - -
-
- - [% Translate("or") | html %] - [% Translate("Cancel") | html %] -
-
-
-
-
-
-
-
- -[% WRAPPER JSOnDocumentComplete %] - -[% END %] diff --git a/Kernel/System/QueueService.pm b/Kernel/System/QueueService.pm deleted file mode 100644 index de1f04c..0000000 --- a/Kernel/System/QueueService.pm +++ /dev/null @@ -1,188 +0,0 @@ -# -- -# Kernel/System/QueueService.pm - core module -# Manages Queue Services -# -# Copyright (C) (2014) - SeTIC - UFSC - http://setic.ufsc.br/ -# Version 06/01/2015 - Adjusts for OTRS 4 -# -# 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", # Old LayoutObject - "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; diff --git a/QueueService.sopm b/QueueService.sopm deleted file mode 100755 index 04c46a0..0000000 --- a/QueueService.sopm +++ /dev/null @@ -1,44 +0,0 @@ - - - QueueService - 1.2.0 - 5.0.x - SeTIC - http://setic.ufsc.br - GPLv2 - - First Version - Support for OTRS 4 - Support for OTRS 5.0.x - - Services per queue association - - ? - ? - -
- ]]>
- - - - - - - - - - - - - - - - - - - - - - -
diff --git a/src/Kernel/Config/Files/XML/QueueService.xml b/src/Kernel/Config/Files/XML/QueueService.xml new file mode 100755 index 0000000..5d0ad1f --- /dev/null +++ b/src/Kernel/Config/Files/XML/QueueService.xml @@ -0,0 +1,67 @@ + + + + Frontend module registration for the service per queue. Support module used by other modules. Allows associating services and queues. + Registro do módulo de frontend de serviços por fila. Módulo de suporte usado por outros módulos. Permite associar serviços e filas. + Frontend::Admin::ModuleRegistration + + + + + + + + + + admin + + + Admin + Services per queue + Serviços por fila + Admin + + + + + + Main menu item registration. + Registro do item do menu principal. + Frontend::Admin::ModuleRegistration::MainMenu + + + + + + + + + + + Admin area navigation for the agent interface. + Área administrativa para a interface de agente. + Frontend::Admin::ModuleRegistration::AdminOverview + + + + + admin + + + + + + + Kernel::Output::HTML::NavBar::ModuleAdmin + Services per queue + Serviços por fila + Ticket + Create and manages services per queue + Cria e gerencia serviços por fila + + + + + + + diff --git a/src/Kernel/Language/pt_BR_QueueService.pm b/src/Kernel/Language/pt_BR_QueueService.pm new file mode 100644 index 0000000..142dc54 --- /dev/null +++ b/src/Kernel/Language/pt_BR_QueueService.pm @@ -0,0 +1,28 @@ +# -- +# Kernel/Modules/pt_BR_QueueService.pm - module to associate services per queue +# +# Copyright (C) 2014-2018 - SeTIC - UFSC - http://setic.ufsc.br/ +# +# Version 2015-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::Language::pt_BR_QueueService; + +use strict; +use warnings; +use utf8; + +sub Data { + my $Self = shift; + $Self->{Translation}->{'Services per queue'} = 'Serviços por fila'; + $Self->{Translation}->{'Create and manages services per queue'} = 'Cria e gerencia serviços por fila'; + + return 1; +} + +1; \ No newline at end of file diff --git a/src/Kernel/Modules/QueueService.pm b/src/Kernel/Modules/QueueService.pm new file mode 100644 index 0000000..a3bc670 --- /dev/null +++ b/src/Kernel/Modules/QueueService.pm @@ -0,0 +1,219 @@ +# -- +# Kernel/Modules/QueueService.pm - frontend module +# +# 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 +# +package Kernel::Modules::QueueService; + +use strict; +use warnings; +use Data::Dumper; + +our @ObjectDependencies = ( + "Kernel::System::Web::Request", + "Kernel::System::DB", + "Kernel::System::Ticket", + "Kernel::Output::HTML::Layout", + "Kernel::System::Log", + "Kernel::System::Queue", + "Kernel::Config", + "Kernel::System::Encode", + "Kernel::System::Main", + "Kernel::System::QueueService", + "Kernel::System::Service" +); + +sub new { + my ( $Type, %Param ) = @_; + + # allocate new hash for object + my $Self = {%Param}; + bless( $Self, $Type ); + + return $Self; +} + +sub Run { + my ( $Self, %Param ) = @_; + + my $ParamObject = $Kernel::OM->Get("Kernel::System::Web::Request"); + + my $SubAction = $ParamObject->GetParam( Param => "Subaction" ); + + if ( $SubAction eq "ServiceEdit" ) { + return $Self->ShowChangeService( ID => $ParamObject->GetParam( Param => "ID" ) ); + } + elsif ( $SubAction eq "QueueEdit" ) { + return $Self->ShowChangeQueue( ID => $ParamObject->GetParam( Param => "ID" ) ); + } + elsif ( $SubAction eq "ChangeService" ) { + $Self->ChangeService(); + return $Self->ShowOverview(); + } + elsif ( $SubAction eq "ChangeQueue" ) { + $Self->ChangeQueue(); + return $Self->ShowOverview(); + } + else { + return $Self->ShowOverview(); + } +} + +sub ShowOverview() { + my ( $Self, %Param ) = @_; + my %Data = (); + + my %Queues = $Kernel::OM->Get("Kernel::System::Queue")->QueueList( Valid => 1 ); + my %Services = $Kernel::OM->Get("Kernel::System::Service")->ServiceList( UserID => 1 ); + my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout"); + my $LanguageObject = $Kernel::OM->Get("Kernel::Language"); + + foreach my $service ( sort { uc( $Services{$a} ) cmp uc( $Services{$b} ) } keys %Services ) { + $LayoutObject->Block( + Name => 'ListService', + Data => { + ServiceID => $service, + ServiceName => $Services{$service}, + } + ); + } + + foreach my $queue ( sort { uc( $Queues{$a} ) cmp uc( $Queues{$b} ) } keys %Queues ) { + $LayoutObject->Block( + Name => 'ListQueue', + Data => { + QueueID => $queue, + QueueName => $Queues{$queue}, + } + ); + } + + my $Output = $LayoutObject->Header( Title => $LanguageObject->Translate("Services per queue") ); + $Output .= $LayoutObject->NavigationBar(); + $Output .= $LayoutObject->Output( + Data => \%Data, + TemplateFile => 'QueueService' + ); + + $Output .= $LayoutObject->Footer(); + return $Output; +} + +=item ShowChangeService() + +Show view to change queues associated to a service + +=cut +sub ShowChangeService() { + my ( $Self, %Param ) = @_; + my %Data = (); + my %Service = $Kernel::OM->Get("Kernel::System::Service")->ServiceGet( ServiceID => $Param{ID}, UserID => 1 ); + my %QueuesService = $Kernel::OM->Get("Kernel::System::QueueService")->GetQueueList( ServiceID => $Param{ID} ); + my %Queues = $Kernel::OM->Get("Kernel::System::Queue")->QueueList( Valid => 1 ); + my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout"); + my $LanguageObject = $Kernel::OM->Get("Kernel::Language"); + + $Data{Type} = "Queue"; + $Data{Filter} = "Service"; + $Data{VisibleNeType} = "Service"; + $Data{Name} = $Service{Name}; + $Data{ID} = $Service{ServiceID}; + + $LayoutObject->Block( + Name => 'ChangeHeader', + Data => \%Data + ); + + foreach my $queue ( sort { uc( $Queues{$a} ) cmp uc( $Queues{$b} ) } keys %Queues ) { + $LayoutObject->Block( + Name => 'ChangeRow', + Data => { + Type => "Queue", + ID => $queue, + Name => $Queues{$queue}, + Selected => ( $QueuesService{$queue} ? 'checked="checked"' : '' ) + } + ); + } + + my $Output = + $LayoutObject->Header( Title => $LanguageObject->Translate("Services per queue") ); + $Output .= $LayoutObject->NavigationBar(); + $Output .= $LayoutObject->Output( + Data => \%Data, + TemplateFile => 'QueueServiceChange' + ); + + $Output .= $LayoutObject->Footer(); + return $Output; +} + +=item ShowChangeQueue() + +Show view to change services associated to a queue + +=cut +sub ShowChangeQueue() { + my ( $Self, %Param ) = @_; + my %Data = (); + my %Queue = $Kernel::OM->Get("Kernel::System::Queue")->QueueGet( ID => $Param{ID} ); + my %ServicesQueue = $Kernel::OM->Get("Kernel::System::QueueService")->GetServiceList( QueueID => $Param{ID} ); + my %Services = $Kernel::OM->Get("Kernel::System::Service")->ServiceList( UserID => 1 ); + my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout"); + my $LanguageObject = $Kernel::OM->Get("Kernel::Language"); + + $Data{Type} = "Service"; + $Data{Filter} = "Queue"; + $Data{VisibleNeType} = "Queue"; + $Data{Name} = $Queue{Name}; + $Data{ID} = $Queue{QueueID}; + + $LayoutObject->Block( + Name => 'ChangeHeader', + Data => \%Data + ); + + foreach my $service ( sort { uc( $Services{$a} ) cmp uc( $Services{$b} ) } keys %Services ) { + $LayoutObject->Block( + Name => 'ChangeRow', + Data => { + Type => "Service", + ID => $service, + Name => $Services{$service}, + Selected => ( $ServicesQueue{$service} ? 'checked="checked"' : '' ) + } + ); + } + + my $Output = + $LayoutObject->Header( Title => $LanguageObject->Translate("Services per queue") ); + $Output .= $LayoutObject->NavigationBar(); + $Output .= $LayoutObject->Output( + Data => \%Data, + TemplateFile => 'QueueServiceChange' + ); + + $Output .= $LayoutObject->Footer(); + return $Output; + +} + +sub ChangeService() { + my ( $Self, %Param ) = @_; + my @queueIDs = $Kernel::OM->Get("Kernel::System::Web::Request")->GetArray( Param => 'Queue' ); + my $id = $Kernel::OM->Get("Kernel::System::Web::Request")->GetParam( Param => 'ID' ); + $Kernel::OM->Get("Kernel::System::QueueService")->SetServiceQueues(ServiceID => $id, Queues => \@queueIDs); +} + +sub ChangeQueue() { + my ( $Self, %Param ) = @_; + my @serviceIDs = $Kernel::OM->Get("Kernel::System::Web::Request")->GetArray( Param => 'Service' ); + my $id = $Kernel::OM->Get("Kernel::System::Web::Request")->GetParam( Param => 'ID' ); + $Kernel::OM->Get("Kernel::System::QueueService")->SetQueueServices(QueueID => $id, Services => \@serviceIDs); + +} + +1; \ No newline at end of file diff --git a/src/Kernel/Output/HTML/Templates/Standard/QueueService.tt b/src/Kernel/Output/HTML/Templates/Standard/QueueService.tt new file mode 100644 index 0000000..01aeb15 --- /dev/null +++ b/src/Kernel/Output/HTML/Templates/Standard/QueueService.tt @@ -0,0 +1,88 @@ +# -- +# Kernel/Output/HTML/Standard/QueueService.tt - overview +# +# Copyright (C) (2014-2018) - SeTIC - UFSC - http://setic.ufsc.br/ +# +# Version 2016-06-01 - Adjusts for OTRS 4 +# Version 2018-01-03 - Adjusts 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. +# -- +
+

[% Translate("Services per queue") | html %]

+ + [% BreadcrumbPath = [ + { + Name => Translate('Services per queue'), + Link => Env("Action"), + }, + ] + %] + [% INCLUDE "Breadcrumb.tt" Path = BreadcrumbPath %] + +
+ +
+
+

[% Translate("Actions") | html %]

+
+ +
+ +[% RenderBlockStart("serviceFilter") %] +
+
+

+
+
+ +
+
+[% RenderBlockEnd("serviceFilter") %] +[% RenderBlockStart("queueFilter") %] +
+
+

+
+
+ +
+
+[% RenderBlockEnd("queueFilter") %] +
+ +
+
+ +
+

[% Translate("Overview") | html %]

+
+
+
+
    +
  • [% Translate("Services") | html %]
  • + +[% RenderBlockStart("ListService") %] +
  • [% Data.ServiceName | html %]
  • +[% RenderBlockEnd("ListService") %] +
+
+
+
    +
  • [% Translate("Queues") | html %]
  • + +[% RenderBlockStart("ListQueue") %] +
  • [% Data.QueueName | html %]
  • +[% RenderBlockEnd("ListQueue") %] +
+
+
+
\ No newline at end of file diff --git a/src/Kernel/Output/HTML/Templates/Standard/QueueServiceChange.tt b/src/Kernel/Output/HTML/Templates/Standard/QueueServiceChange.tt new file mode 100644 index 0000000..9115ba8 --- /dev/null +++ b/src/Kernel/Output/HTML/Templates/Standard/QueueServiceChange.tt @@ -0,0 +1,123 @@ +# -- +# Kernel/Output/HTML/Standard/QueueServiceChange.tt - edit +# Copyright (C) (2014) SeTIC - UFSC - http://setic.ufsc.br/ +# Version 06/01/2015 - Adjusts for OTRS 4 +# +# 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. +# -- +
+

[% Translate("Services and queues") | html %]

+ + [% BreadcrumbPath = [ + { + Name => Translate('Services per queue'), + Link => Env("Action"), + }, + ] + %] + + [% IF Data.Type == "Service" %] + [% USE EditTitle = String(Translate("Customizing services for queue")) %] + [% BreadcrumbPath.push({ Name => EditTitle.append( ' ', Data.Name ) }) %] + [% END %] + [% IF Data.Type == "Queue" %] + [% USE EditTitle = String(Translate("Customizing queues for service")) %] + [% BreadcrumbPath.push({ Name => EditTitle.append( ' ', Data.Name ) }) %] + [% END %] + + [% INCLUDE "Breadcrumb.tt" Path = BreadcrumbPath %] + +
+
+
+

[% Translate("Actions") | html %]

+
+ +
+
+
+

+ +

+
+
+ +
+
+
+ +
+
+
+

+[% RenderBlockStart("ChangeHeaderService") %] + [% Translate("Select queues for the service") | html %] +[% RenderBlockEnd("ChangeHeaderService") %] +[% RenderBlockStart("ChangeHeaderQueue") %] + [% Translate("Select services for the queue") | html %] +[% RenderBlockEnd("ChangeHeaderQueue") %] + [% Data.Name | html %] +

+
+
+
+ + + + + + + +[% RenderBlockStart("ChangeHeader") %] + +[% WRAPPER JSOnDocumentComplete %] + +[% END %] +[% RenderBlockEnd("ChangeHeader") %] + + + +[% RenderBlockStart("ChangeRow") %] + + + + +[% RenderBlockEnd("ChangeRow") %] + +
[% Translate(Data.VisibleNeType) | html %] + + [% Translate("Active") | html %] +
[% Data.Name | html %] + +
+
+ + [% Translate("or") | html %] + [% Translate("Cancel") | html %] +
+
+
+
+
+
+
+
+ +[% WRAPPER JSOnDocumentComplete %] + +[% END %] diff --git a/src/Kernel/System/QueueService.pm b/src/Kernel/System/QueueService.pm new file mode 100644 index 0000000..9dea3a4 --- /dev/null +++ b/src/Kernel/System/QueueService.pm @@ -0,0 +1,190 @@ +# -- +# 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; diff --git a/src/QueueService.sopm b/src/QueueService.sopm new file mode 100755 index 0000000..3cf5e54 --- /dev/null +++ b/src/QueueService.sopm @@ -0,0 +1,52 @@ + + + QueueService + 1.3.0 + 6.0.x + SeTIC + http://setic.ufsc.br + AGPL + + First Version + Support for OTRS 4 + Support for OTRS 5.0.x + Support for OTRS 6.0.x + + Services per queue association. Support module used by other modules. + Associação entre serviços e filas. Módulo de suporte utilizado por outros módulos. + + + ? + ? + +
+ ]]>
+ +
+ ]]>
+ + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/var/httpd/htdocs/js/QueueService.js b/src/var/httpd/htdocs/js/QueueService.js new file mode 100755 index 0000000..2e487b5 --- /dev/null +++ b/src/var/httpd/htdocs/js/QueueService.js @@ -0,0 +1,24 @@ +/** + * QueueService module + * + * Copyright (C) 2014-2018 - SeTIC - UFSC - http://setic.ufsc.br/ + * + * Version 2018-01-03 - Conversion to JS Module, to support OTRS 6 + * + */ +var Core = Core || {}; +Core.Agent = Core.Agent || {}; +Core.Agent.Admin = Core.Agent.Admin || {}; + +Core.Agent.Admin.QueueService = (function (TargetNS) { + + TargetNS.Init = function() { + Core.UI.Table.InitTableFilter($('#FilterServices'), $('#Services')); + Core.UI.Table.InitTableFilter($('#FilterQueues'), $('#Queues')); + } + + Core.Init.RegisterNamespace(TargetNS, 'APP_MODULE'); + + return TargetNS; + +}(Core.Agent.Admin.QueueService || {})); \ No newline at end of file -- libgit2 0.21.2