diff --git a/CreateOpmUFSC.sh b/CreateOpmUFSC.sh
new file mode 100755
index 0000000..3dd99b6
--- /dev/null
+++ b/CreateOpmUFSC.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+LOCAL="$PWD"
+cd /opt/otrs/bin
+./otrs.PackageManager.pl -a build -p "$LOCAL"/QueuePanelUFSC.sopm -o "$LOCAL"/
+cd $LOCAL
diff --git a/Kernel/Config/Files/QueuesPanel.xml b/Kernel/Config/Files/QueuesPanel.xml
index 463400d..3d69cc1 100644
--- a/Kernel/Config/Files/QueuesPanel.xml
+++ b/Kernel/Config/Files/QueuesPanel.xml
@@ -76,6 +76,79 @@
Escolha o local para o qual deseja atendimento
+
+
+
+ Queues IDs to not show in panel (comma separated).
+ Ticket
+ Frontend::Customer::QueuesPanel
+
+
+
+
+
+
+ Customer footer/header suffix, if used.
+ Ticket
+ Frontend::Customer::QueuesPanel
+
+
+
+
+
+
+ Extra queues to show in panel. Format: One per Line, Name|URL
+ Ticket
+ Frontend::Customer::QueuesPanel
+
+
+
+
+
+
+ Extra queues to show in panel, for public access. Format: One per Line, Name|URL
+ Ticket
+ Frontend::Customer::QueuesPanel
+
+
+
+
+
+
+ Extra JS if necessary
+ Ticket
+ Frontend::Customer::QueuesPanel
+
+
+
+
+
+
+
+
+ Base URL to call to create ticket, queue ID added to the end
+ Ticket
+ Frontend::Customer::QueuesPanel
+
+ /otrs/customer.pl?Action=NewTicketWizard;QueueID=
+
+
+
+
+ Base URL to call to create ticket, queue ID added to the end
+ Ticket
+ Frontend::Customer::QueuesPanel
+
+ /otrs/public.pl?Action=NewTicketWizardPublic;QueueID=
+
-
+
+
\ No newline at end of file
diff --git a/Kernel/Language/pt_BR_QueuesPanel.pm b/Kernel/Language/pt_BR_QueuesPanel.pm
index 670f660..dd19d66 100644
--- a/Kernel/Language/pt_BR_QueuesPanel.pm
+++ b/Kernel/Language/pt_BR_QueuesPanel.pm
@@ -8,7 +8,7 @@
# 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_NewTicketWizard;
+package Kernel::Language::pt_BR_QueuesPanel;
use strict;
use warnings;
@@ -21,6 +21,18 @@ sub Data {
$Self->{Translation}->{'Started at: '} = 'Iniciada em:';
$Self->{Translation}->{'Queues panel'} = 'Novo chamado';
$Self->{Translation}->{'Choose the service to ask for support'} = 'Escolha o serviço para o qual deseja suporte';
+ $Self->{Translation}->{'Message to let the user choose a queue.'} = 'Mensagem para o usuário escolher a fila';
+ $Self->{Translation}->{'Queues IDs to not show in panel (comma separated).'} = 'IDs das filas que não devem aparecer no painel (separados por vírgula)';
+ $Self->{Translation}->{'Customer footer/header suffix, if used.'} = 'Sufixo personalizado de cabeçalho/rodapé, se usado';
+ $Self->{Translation}->{'Base URL to call to create ticket, queue ID added to the end'} = 'URl para criar ticket - id da fila adicionado ao final';
+ $Self->{Translation}->{'Extra queues to show in panel. Format: One per Line, Name|URL'} = 'Filas extra, com URLs especiais. Formato: Nome|URL';
+ $Self->{Translation}->{'Extra queues to show in panel, for public access. Format: One per Line, Name|URL'} = 'Filas extra no modo público, com URLs especiais. Formato: Nome|URL';
+
+
+
+
+
+
return 1;
}
1;
\ No newline at end of file
diff --git a/Kernel/Language/pt_BR_QueuesPanelPublic.pm b/Kernel/Language/pt_BR_QueuesPanelPublic.pm
index 0b55537..3e6fc0f 100644
--- a/Kernel/Language/pt_BR_QueuesPanelPublic.pm
+++ b/Kernel/Language/pt_BR_QueuesPanelPublic.pm
@@ -9,7 +9,7 @@
# 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_NewTicketWizard;
+package Kernel::Language::pt_BR_QueuesPanelPublic;
use strict;
use warnings;
diff --git a/Kernel/Modules/QueuesPanel.pm b/Kernel/Modules/QueuesPanel.pm
index 742da8d..cdbbdcc 100644
--- a/Kernel/Modules/QueuesPanel.pm
+++ b/Kernel/Modules/QueuesPanel.pm
@@ -22,7 +22,8 @@ our @ObjectDependencies = (
"Kernel::Output::HTML::Layout",
"KerneL::System::Log",
"Kernel::Config",
-"Kernel::System::Queue");
+"Kernel::System::Queue",
+"Kernel::System::QueuesPanel");
sub new {
my ( $Type, %Param ) = @_;
@@ -41,147 +42,30 @@ sub Run {
my $ConfigObject = $Kernel::OM->Get("Kernel::Config");
my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout");
- $Self->{UrlAtendimento} = '/otrs/customer.pl?Action=NewTicketWizard;QueueID=';
-
- $Data{"QueueJS"} = $Self->BuildQueuesJS();
-
$Self->{Config} = $ConfigObject->Get("Ticket::Frontend::Customer::QueuesPanel");
my $msgChooseService = $Self->{Config}->{"MessageChooseQueue"};
+ my $ignoreQueuesIDs = $Self->{Config}->{"IgnoreQueuesIDs"};
+ my $customHeaderFooterID = $Self->{Config}->{"CustomHeaderFooterID"};
+ my $extraQueues = $Self->{Config}->{"ExtraQueues"};
+ my $URL = $Self->{Config}->{"NewTicketURL"};
+ my $customJS = $Self->{Config}->{"CustomJS"};
+
+ my $queuesPanelBuilder = $Kernel::OM->Get("Kernel::System::QueuesPanel");
+
+ $Data{"CustomJS"} = $customJS;
+ $Data{"QueueJS"} = $queuesPanelBuilder->BuildQueuesJS(IgnoreQueuesIDs => $ignoreQueuesIDs, ExtraQueues => $extraQueues, URL => $URL);
+
$Data{MsgChooseQueue} = $msgChooseService;
# build output
- my $Output = $LayoutObject->CustomerHeader( Title => $LayoutObject->{LanguageObject}->Translate("Queues panel") );
+ my $Output = $LayoutObject->CustomerHeader( Type => $customHeaderFooterID, Title => $LayoutObject->{LanguageObject}->Translate("Queues panel") );
$Output .= $LayoutObject->Output(
Data => \%Data,
TemplateFile => 'QueuesPanel',
);
- $Output .= $LayoutObject->CustomerFooter();
+ $Output .= $LayoutObject->CustomerFooter(Type => $customHeaderFooterID);
return $Output;
}
-sub BuildQueuesJS {
- my ( $Self, %Param ) = @_;
-
- # Get queues
- my %Queues = ();
-
- my $DBObject = $Kernel::OM->Get("Kernel::System::DB");
-
- $DBObject->Prepare( SQL => "SELECT id, name FROM queue WHERE valid_id = 1 ORDER BY name ASC", );
- while ( my @Row = $DBObject->FetchrowArray() ) {
- $Queues{ $Row[0] } = $Row[1];
- }
-
- my $result =
- '$(document).ready(function() {' . "\n\t"
- . ' $("#columns").hColumns({'
- . "\n\t\t"
- . ' nodeSource: function(node_id, callback) {' . "\n";
-
- for my $queue ( keys %Queues ) {
- $result = $result . $Self->BuildQueueJS( Queues => \%Queues, Queue => $Queues{$queue}, QueueID => $queue );
- }
-
- $result = $result . $Self->BuildTopQueuesJS( Queues => \%Queues );
-
- $result = $result . "\n\t}});\n});";
-
- return $result;
-}
-
-use Data::Dumper;
-
-sub BuildTopQueuesJS {
- my ( $Self, %Param ) = @_;
- my %Queues = %{ $Param{"Queues"} };
-
- my @topQueues = grep { index( $Queues{$_}, '::' ) == -1 } keys %Queues;
-
- my $result = "\t\tif (node_id === null) { \n\t\t\treturn callback(null, [\n";
- for my $queue (sort {$Queues{$a} cmp $Queues{$b}} @topQueues) {
-
- if ( grep { index( $Queues{$_}, $Queues{$queue} . "::" ) >= 0 } keys %Queues ) {
- $result = $result
- . "\t\t\t\t"
- . '{ id: '
- . $queue
- . ', label: "'
- . $Self->LastQueue( $Queues{$queue} )
- . '", type: "folder" },' . "\n";
- }
- else {
- $result = $result
- . "\t\t\t\t"
- . '{ id: '
- . $queue
- . ', label: "'
- . $Self->LastQueue( $Queues{$queue} )
- . '", type: "link", url: "'
- . $Self->{UrlAtendimento}
- . $queue . '" },' . "\n";
- }
- }
-
- $result = $result . "\t\t\t]);\n\t\t}\n";
-
- return $result;
-}
-
-sub BuildQueueJS {
- my ( $Self, %Param ) = @_;
- my %Queues = %{ $Param{"Queues"} };
- my $BaseQueue = $Param{"Queue"};
- my $BaseQueueID = $Param{"QueueID"};
-
- # Get subqueues
- my @subqueues = grep { index( $Queues{$_}, $BaseQueue . "::" ) >= 0 } keys %Queues;
- my $level = () = $BaseQueue =~ /::/g;
- $level = $level + 1;
-
- # Remove subsubqueues
- @subqueues = grep { ( () = $Queues{$_} =~ /::/g ) == $level } @subqueues;
-
- # When there are no subqueues, there is no need to create a JS
- if ( !@subqueues ) {
- return;
- }
-
- my $result = "\t\tif (node_id === " . $BaseQueueID . ") { \n\t\t\treturn callback(null, [\n";
-
- for my $queue (@subqueues) {
- if ( grep { index( $Queues{$_}, $Queues{$queue} . "::" ) >= 0 } keys %Queues ) {
- $result = $result
- . "\t\t\t\t"
- . '{ id: '
- . $queue
- . ', label: "'
- . $Self->LastQueue( $Queues{$queue} )
- . '", type: "folder" }, ' . "\n";
- }
- else {
- $result = $result
- . "\t\t\t\t"
- . '{ id: '
- . $queue
- . ', label: "'
- . $Self->LastQueue( $Queues{$queue} )
- . '", type: "link", url: "'
- . $Self->{UrlAtendimento}
- . $queue . '" }, ' . "\n";
- }
- }
-
- $result = $result . "\t\t\t]);\n\t\t}\n";
-
- return $result;
-}
-
-sub LastQueue {
- my $Self = shift;
- my $queue = shift;
- my @parts = split( "::", $queue );
- return $parts[-1];
-}
-
1;
diff --git a/Kernel/Modules/QueuesPanelPublic.pm b/Kernel/Modules/QueuesPanelPublic.pm
index 1c17df7..7cd6a09 100644
--- a/Kernel/Modules/QueuesPanelPublic.pm
+++ b/Kernel/Modules/QueuesPanelPublic.pm
@@ -22,7 +22,8 @@ our @ObjectDependencies = (
"Kernel::Output::HTML::Layout",
"KerneL::System::Log",
"Kernel::Config",
-"Kernel::System::Queue");
+"Kernel::System::Queue",
+"Kernel::System::QueuesPanel");
sub new {
my ( $Type, %Param ) = @_;
@@ -60,153 +61,31 @@ sub Run {
. "?Action=QueuesPanelPublic";
return $LayoutObject->Redirect( ExtURL => $url, );
}
-
- $Self->{UrlAtendimento} = '/otrs/public.pl?Action=NewTicketWizardPublic;QueueID=';
- $Data{"QueueJS"} = $Self->BuildQueuesJS();
-
+
$Self->{Config} = $Self->{ConfigObject}->Get("Ticket::Frontend::Customer::QueuesPanel");
my $msgChooseService = $Self->{Config}->{"MessageChooseQueuePublic"};
+ my $ignoreQueuesIDs = $Self->{Config}->{"IgnoreQueuesIDs"};
+ my $customHeaderFooterID = $Self->{Config}->{"CustomHeaderFooterID"};
+ my $extraQueues = $Self->{Config}->{"ExtraQueuesPublic"};
+ my $URL = $Self->{Config}->{"NewTicketURLPublic"};
+ my $customJS = $Self->{Config}->{"CustomJS"};
+
+ my $queuesPanelBuilder = $Kernel::OM->Get("Kernel::System::QueuesPanel");
+
+ $Data{"CustomJS"} = $customJS;
+ $Data{"QueueJS"} = $queuesPanelBuilder->BuildQueuesJS(IgnoreQueuesIDs => $ignoreQueuesIDs, ExtraQueues => $extraQueues, URL => $URL);
$Data{MsgChooseQueue} = $msgChooseService;
# build output
my $Output =
- $LayoutObject->CustomerHeader( Title => $LayoutObject->{LanguageObject}->Translate("New ticket") );
+ $LayoutObject->CustomerHeader( Type => $customHeaderFooterID, Title => $LayoutObject->{LanguageObject}->Translate("New ticket") );
$Output .= $LayoutObject->Output(
Data => \%Data,
TemplateFile => 'QueuesPanel',
);
- $Output .= $LayoutObject->CustomerFooter();
+ $Output .= $LayoutObject->CustomerFooter(Type => $customHeaderFooterID);
return $Output;
}
-sub BuildQueuesJS {
- my ( $Self, %Param ) = @_;
-
- # Get queues
- my %Queues = ();
-
- my $DBObject = $Kernel::OM->Get("Kernel::System::DB");
-
- $DBObject->Prepare( SQL => "SELECT id, name FROM queue WHERE valid_id = 1 ORDER BY name ASC", );
- while ( my @Row = $DBObject->FetchrowArray() ) {
- $Queues{ $Row[0] } = $Row[1];
- }
-
- my $result =
- '$(document).ready(function() {' . "\n\t"
- . ' $("#columns").hColumns({'
- . "\n\t\t"
- . ' nodeSource: function(node_id, callback) {' . "\n";
-
- for my $queue ( keys %Queues ) {
- $result = $result . $Self->BuildQueueJS( Queues => \%Queues, Queue => $Queues{$queue}, QueueID => $queue );
- }
-
- $result = $result . $Self->BuildTopQueuesJS( Queues => \%Queues );
-
- $result = $result . "\n\t}});\n});";
-
- return $result;
-}
-
-sub BuildTopQueuesJS {
- my ( $Self, %Param ) = @_;
- my %Queues = %{ $Param{"Queues"} };
-
- my @topQueues = grep { index( $Queues{$_}, '::' ) == -1 } keys %Queues;
-
- my $result = "\t\tif (node_id === null) { \n\t\t\treturn callback(null, [\n";
- for my $queue (sort {$Queues{$a} cmp $Queues{$b}} @topQueues) {
-
- if ( grep { index( $Queues{$_}, $Queues{$queue} . "::" ) >= 0 } keys %Queues ) {
- $result = $result
- . "\t\t\t\t"
- . '{ id: '
- . $queue
- . ', label: "'
- . $Self->LastQueue( $Queues{$queue} )
- . '", type: "folder" },' . "\n";
- }
- else {
- $result = $result
- . "\t\t\t\t"
- . '{ id: '
- . $queue
- . ', label: "'
- . $Self->LastQueue( $Queues{$queue} )
- . '", type: "link", url: "'
- . $Self->{UrlAtendimento}
- . $queue . '" },' . "\n";
- }
- }
-
- $result = $result . "\t\t\t]);\n\t\t}\n";
-
- return $result;
-}
-
-sub BuildQueueJS {
- my ( $Self, %Param ) = @_;
- my %Queues = %{ $Param{"Queues"} };
- my $BaseQueue = $Param{"Queue"};
- my $BaseQueueID = $Param{"QueueID"};
-
- # Get subqueues
- my @subqueues = grep { index( $Queues{$_}, $BaseQueue . "::" ) >= 0 } keys %Queues;
- my $level = () = $BaseQueue =~ /::/g;
- $level = $level + 1;
-
- # Remove subsubqueues
- @subqueues = grep { ( () = $Queues{$_} =~ /::/g ) == $level } @subqueues;
-
- # When there are no subqueues, there is no need to create a JS
- if ( !@subqueues ) {
- return "";
- }
-
- my $result = "\t\tif (node_id === " . $BaseQueueID . ") { \n\t\t\treturn callback(null, [\n";
-
- for my $queue (sort {$Self->LastQueue($Queues{$a}) cmp $Self->LastQueue($Queues{$b})} @subqueues) {
- if ( grep { index( $Queues{$_}, $Queues{$queue} . "::" ) >= 0 } keys %Queues ) {
- $result = $result
- . "\t\t\t\t"
- . '{ id: '
- . $queue
- . ', label: "'
- . $Self->LastQueue( $Queues{$queue} )
- . '", type: "folder" }, ' . "\n";
- }
- else {
- $result = $result
- . "\t\t\t\t"
- . '{ id: '
- . $queue
- . ', label: "'
- . $Self->LastQueue( $Queues{$queue} )
- . '", type: "link", url: "'
- . $Self->{UrlAtendimento}
- . $queue . '" }, ' . "\n";
- }
- }
-
- $result = $result . "\t\t\t]);\n\t\t}\n";
-
- return $result;
-}
-
-sub FirstQueue {
- my $Self = shift;
- my $queue = shift;
- my @parts = split( "::", $queue );
- return $parts[0];
-}
-
-sub LastQueue {
- my $Self = shift;
- my $queue = shift;
- my @parts = split( "::", $queue );
- return $parts[-1];
-}
-
1;
diff --git a/Kernel/Output/HTML/Standard/CustomerFooterQPUFSC.tt b/Kernel/Output/HTML/Standard/CustomerFooterQPUFSC.tt
new file mode 100755
index 0000000..a8f3b62
--- /dev/null
+++ b/Kernel/Output/HTML/Standard/CustomerFooterQPUFSC.tt
@@ -0,0 +1,33 @@
+# --
+# CustomerFooterQPUFSC.tt - Footer para Queues Panel na UFSC
+# Copyright (C) 2001-2014 OTRS AG, http://otrs.com/
+# --
+# 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.
+# --
+
+
+
+
+
+
+[% InsertTemplate("CustomerFooterJS.tt") %]
+
+