diff --git a/Kernel/Config/Files/NewTicketWizard.xml b/Kernel/Config/Files/NewTicketWizard.xml index 65e69d3..8f018a7 100644 --- a/Kernel/Config/Files/NewTicketWizard.xml +++ b/Kernel/Config/Files/NewTicketWizard.xml @@ -522,6 +522,17 @@ Escolha o local para o qual deseja atendimento + + + Message to let the user choose a queue. + Mensagem para o usuário selecionar uma fila. + Ticket + Frontend::Customer::QueuesPanel + + Escolha o local para o qual deseja atendimento + + \ No newline at end of file diff --git a/Kernel/Modules/NewTicketWizard.pm b/Kernel/Modules/NewTicketWizard.pm index 4c3968a..b0e0d6f 100644 --- a/Kernel/Modules/NewTicketWizard.pm +++ b/Kernel/Modules/NewTicketWizard.pm @@ -109,7 +109,7 @@ sub BuildServices { Max => 200 ); - print STDERR "\n\n\n Combo " . $retorno . "\n\n\n"; + $Self->Debug( "\n\n\n Combo " . $retorno . "\n\n\n" ); return $retorno; } @@ -298,7 +298,7 @@ sub GetFormJSON { my ( $schema, $fields, $introduction ) = $Self->GetForm( ServiceForm => \%serviceForm, QueueID => $QueueID ); - print STDERR "[{" . $schema . "}, {" . $fields . "}, \"" . $introduction . "\"]"; + $Self->Debug( "[{" . $schema . "}, {" . $fields . "}, \"" . $introduction . "\"]" ); return $Self->{LayoutObject}->Attachment( ContentType => 'application/json; charset=' . $Self->{LayoutObject}->{Charset}, @@ -358,10 +358,10 @@ sub GetQueueID() { # Check if queueID was sent my $QueueID = $Self->{ParamObject}->GetParam( Param => "QueueID" ); - print STDERR "\n\nBSUCANDO $QueueID FILA\n\n"; + $Self->Debug( "\n\nBSUCANDO $QueueID FILA\n\n"); if ($QueueID) { - print STDERR "\n\nRecebida fila $QueueID\n\n"; + $Self->Debug( "\n\nRecebida fila $QueueID\n\n" ); my %Queue = $Self->{QueueObject}->QueueGet( ID => $QueueID ); return ( $Queue{"Name"}, $QueueID ); } @@ -373,7 +373,7 @@ sub GetQueueID() { my $QueueDefault = $ConfigTicket->{"QueueDefault"}; # Checks if there is a field for the queue - print STDERR Dumper($ConfigTicketWizard); + $Self->Debug( Dumper($ConfigTicketWizard) ); my $QueuePrefix = $ConfigTicketWizard->{"QueuePrefix"}; my $QueueField = $ConfigTicketWizard->{"QueueField"}; @@ -409,7 +409,7 @@ sub CreateTicket { my ( $Queue, $QueueID ) = $Self->GetQueueID(%Param); $Data{QueueID} = $QueueID; - print STDERR "\n\nFila achada: " . $Queue . "\n\n"; + $Self->Debug( "\n\nFila achada: " . $Queue . "\n\n" ); $Self->{Config} = $Self->{ConfigObject}->Get("Ticket::Frontend::CustomerTicketMessage"); @@ -510,7 +510,7 @@ sub Debug { my $Self = shift; my $msg = shift; - print STDERR "\n\nDEBUG => \n$msg\n\n"; + #print STDERR "\n\nDEBUG => \n$msg\n\n"; } 1; diff --git a/Kernel/Modules/NewTicketWizardPublic.pm b/Kernel/Modules/NewTicketWizardPublic.pm index 7442bb5..662500c 100644 --- a/Kernel/Modules/NewTicketWizardPublic.pm +++ b/Kernel/Modules/NewTicketWizardPublic.pm @@ -265,10 +265,10 @@ sub GetQueueID() { # Check if queueID was sent my $QueueID = $Self->{ParamObject}->GetParam(Param => "QueueID"); - print STDERR "\n\nBSUCANDO $QueueID FILA\n\n"; + $Self->Debug( "\n\nBSUCANDO $QueueID FILA\n\n"); if ($QueueID) { - print STDERR "\n\nRecebida fila $QueueID\n\n"; + $Self->Debug( "\n\nRecebida fila $QueueID\n\n" ); my %Queue = $Self->{QueueObject}->QueueGet(ID => $QueueID); return ($Queue{"Name"}, $QueueID); } @@ -284,7 +284,7 @@ sub GetQueueID() { my $QueuePrefix = $ConfigTicketWizard->{"QueuePrefix"}; my $QueueField = $ConfigTicketWizard->{"QueueField"}; - $Self->{LogObject}->Log( Priority => 'info', Message => "Searching queue for - $QueuePrefix ($QueueField)!" ); + $Self->Debug( "Searching queue for - $QueuePrefix ($QueueField)!" ); my %QueueListID = $Self->{QueueObject}->QueueList( Valid => 1 ); my %QueueList = reverse $Self->{QueueObject}->QueueList( Valid => 1 ); @@ -294,13 +294,12 @@ sub GetQueueID() { if ( $QueuePrefix && $QueueField ) { my $QueueSelected = $Self->{ParamObject}->GetParam( Param => $QueueField ); my $QueueName = "$QueuePrefix $QueueSelected"; - $Self->{LogObject} - ->Log( Priority => 'info', Message => "Searching queue for - $QueuePrefix ($QueueField) - [$QueueName]!" ); + $Self->Debug( "Searching queue for - $QueuePrefix ($QueueField) - [$QueueName]!" ); if ( $QueueList{$QueueName} ) { $QueueID = $QueueList{$QueueName}; $Queue = $QueueName; - $Self->{LogObject}->Log( Priority => 'info', Message => "Custom queue found - $QueueName ($QueueID)!" ); + $Self->Debug( "Custom queue found - $QueueName ($QueueID)!" ); } } @@ -452,4 +451,11 @@ sub CreateTicket { } +sub Debug { + my $Self = shift; + my $msg = shift; + + #print STDERR "\n\nDEBUG => \n$msg\n\n"; +} + 1; diff --git a/Kernel/Modules/QueuesPanel.pm b/Kernel/Modules/QueuesPanel.pm index d36d118..0f60c3f 100644 --- a/Kernel/Modules/QueuesPanel.pm +++ b/Kernel/Modules/QueuesPanel.pm @@ -17,8 +17,6 @@ use Data::Dumper; sub new { my ( $Type, %Param ) = @_; - - # allocate new hash for object my $Self = {%Param}; @@ -42,122 +40,146 @@ sub new { sub Run { my ( $Self, %Param ) = @_; my %Data = (); - + $Self->{UrlAtendimento} = '/otrs/customer.pl?Action=NewTicketWizard;QueueID='; $Data{"QueueJS"} = $Self->BuildQueuesJS(); - - $Self->Debug($Data{"QueueJS"}); + + $Self->Debug( $Data{"QueueJS"} ); $Self->{Config} = $Self->{ConfigObject}->Get("Ticket::Frontend::Customer::QueuesPanel"); - my $msgChooseService = $Self->{Config}->{"MessageChooseQueuePublic"}; + my $msgChooseService = $Self->{Config}->{"MessageChooseQueue"}; $Data{MsgChooseQueue} = $msgChooseService; - if ( $Self->{ParamObject}->GetParam( Param => "Subaction" ) ) { - if ( $Self->{ParamObject}->GetParam( Param => "Subaction" ) eq "CreateTicket" ) { - } - elsif ( $Self->{ParamObject}->GetParam( Param => "Subaction" ) eq "GetFormJSON" ) { - } - } - else { - - # build output - my $Output = - $Self->{LayoutObject} - ->CustomerHeader( Title => $Self->{LayoutObject}->{LanguageObject}->Get("Queues panel") ); - - $Output .= $Self->{LayoutObject}->Output( - Data => \%Data, - TemplateFile => 'QueuesPanel', - ); - $Output .= $Self->{LayoutObject}->CustomerFooter(); - return $Output; - } + # build output + my $Output = + $Self->{LayoutObject}->CustomerHeader( Title => $Self->{LayoutObject}->{LanguageObject}->Get("Queues panel") ); + + $Output .= $Self->{LayoutObject}->Output( + Data => \%Data, + TemplateFile => 'QueuesPanel', + ); + $Output .= $Self->{LayoutObject}->CustomerFooter(); + return $Output; } sub BuildQueuesJS { my ( $Self, %Param ) = @_; - + # Get queues my %Queues = (); - + $Self->{DBObject}->Prepare( SQL => "SELECT id, name FROM queue WHERE valid_id = 1 ORDER BY name ASC", ); while ( my @Row = $Self->{DBObject}->FetchrowArray() ) { - $Queues{$Row[0]} = $Row[1]; + $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); + 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 . $Self->BuildTopQueuesJS( Queues => \%Queues ); + $result = $result . "\n\t}});\n});"; - - return $result; + + return $result; } sub BuildTopQueuesJS { my ( $Self, %Param ) = @_; - my %Queues = %{$Param{"Queues"}}; + my %Queues = %{ $Param{"Queues"} }; - my @topQueues = grep { index($Queues{$_},'::') == -1 } keys %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 (@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"; + + 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; + + return $result; } sub BuildQueueJS { my ( $Self, %Param ) = @_; - my %Queues = %{$Param{"Queues"}}; - my $BaseQueue = $Param{"Queue"}; + my %Queues = %{ $Param{"Queues"} }; + my $BaseQueue = $Param{"Queue"}; my $BaseQueueID = $Param{"QueueID"}; # Get subqueues - my @subqueues = grep { index($Queues{$_}, $BaseQueue . "::") >= 0} keys %Queues; + my @subqueues = grep { index( $Queues{$_}, $BaseQueue . "::" ) >= 0 } keys %Queues; my $level = () = $BaseQueue =~ /::/g; $level = $level + 1; - + # Remove subsubqueues - @subqueues = grep { (() = $Queues{$_} =~ /::/g) == $level} @subqueues; - + @subqueues = grep { ( () = $Queues{$_} =~ /::/g ) == $level } @subqueues; + # When there are no subqueues, there is no need to create a JS - if (! @subqueues) { + 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"; - } + + 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; + + return $result; } sub LastQueue { - my $Self = shift; + my $Self = shift; my $queue = shift; - my @parts = split("::", $queue); + my @parts = split( "::", $queue ); return $parts[-1]; } @@ -165,7 +187,7 @@ sub Debug { my $Self = shift; my $msg = shift; - print STDERR "\n\nDEBUG => \n$msg\n\n"; + #print STDERR "\n\nDEBUG => \n$msg\n\n"; } 1; diff --git a/Kernel/Modules/QueuesPanelPublic.pm b/Kernel/Modules/QueuesPanelPublic.pm index e4b29e1..6d22ee3 100644 --- a/Kernel/Modules/QueuesPanelPublic.pm +++ b/Kernel/Modules/QueuesPanelPublic.pm @@ -17,8 +17,6 @@ use Data::Dumper; sub new { my ( $Type, %Param ) = @_; - - # allocate new hash for object my $Self = {%Param}; @@ -42,122 +40,169 @@ sub new { sub Run { my ( $Self, %Param ) = @_; my %Data = (); - + + ## Se recebeu o ticket, significa que usuario já está autenticado + if ( $Self->{ParamObject}->GetParam( Param => "ticket" ) ) { + $Self->Debug("Recebida URL com ticket"); + my $retorno = $Self->{LayoutObject}->Redirect( OP => "Action=QueuesPanel", ); + $retorno =~ s/public/customer/g; + $Self->Debug( "Redirect feito: " . $retorno ); + return $retorno; + } + + ## Se tiver parametro para tentar autenticar, repassa ao CAS com gateway + if ( $Self->{ParamObject}->GetParam( Param => "autenticar" ) ) { + my $url = + $Self->{ConfigObject}->Get('Customer::AuthModule::CAS::CASUrl') + . "/login?gateway=true&service=" + . "https://" + . $ENV{SERVER_NAME} + . $ENV{SCRIPT_NAME} + . "?Action=QueuesPanelPublic"; + $Self->Debug("Recebida tentativa de autenticar via url $url"); + return $Self->{LayoutObject}->Redirect( ExtURL => $url, ); + } + ## + $Self->{UrlAtendimento} = '/otrs/public.pl?Action=NewTicketWizardPublic;QueueID='; $Data{"QueueJS"} = $Self->BuildQueuesJS(); - - $Self->Debug($Data{"QueueJS"}); + + $Self->Debug( $Data{"QueueJS"} ); $Self->{Config} = $Self->{ConfigObject}->Get("Ticket::Frontend::Customer::QueuesPanel"); my $msgChooseService = $Self->{Config}->{"MessageChooseQueuePublic"}; $Data{MsgChooseQueue} = $msgChooseService; - if ( $Self->{ParamObject}->GetParam( Param => "Subaction" ) ) { - if ( $Self->{ParamObject}->GetParam( Param => "Subaction" ) eq "CreateTicket" ) { - } - elsif ( $Self->{ParamObject}->GetParam( Param => "Subaction" ) eq "GetFormJSON" ) { - } - } - else { - - # build output - my $Output = - $Self->{LayoutObject} - ->CustomerHeader( Title => $Self->{LayoutObject}->{LanguageObject}->Get("New ticket") ); - - $Output .= $Self->{LayoutObject}->Output( - Data => \%Data, - TemplateFile => 'QueuesPanel', - ); - $Output .= $Self->{LayoutObject}->CustomerFooter(); - return $Output; - } + # build output + my $Output = + $Self->{LayoutObject}->CustomerHeader( Title => $Self->{LayoutObject}->{LanguageObject}->Get("New ticket") ); + + $Output .= $Self->{LayoutObject}->Output( + Data => \%Data, + TemplateFile => 'QueuesPanel', + ); + $Output .= $Self->{LayoutObject}->CustomerFooter(); + return $Output; } sub BuildQueuesJS { my ( $Self, %Param ) = @_; - + # Get queues my %Queues = (); - + $Self->{DBObject}->Prepare( SQL => "SELECT id, name FROM queue WHERE valid_id = 1 ORDER BY name ASC", ); while ( my @Row = $Self->{DBObject}->FetchrowArray() ) { - $Queues{$Row[0]} = $Row[1]; + $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); + 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 . $Self->BuildTopQueuesJS( Queues => \%Queues ); + $result = $result . "\n\t}});\n});"; - - return $result; + + return $result; } sub BuildTopQueuesJS { my ( $Self, %Param ) = @_; - my %Queues = %{$Param{"Queues"}}; + my %Queues = %{ $Param{"Queues"} }; - my @topQueues = grep { index($Queues{$_},'::') == -1 } keys %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 (@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"; + + 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; + + return $result; } sub BuildQueueJS { my ( $Self, %Param ) = @_; - my %Queues = %{$Param{"Queues"}}; - my $BaseQueue = $Param{"Queue"}; + my %Queues = %{ $Param{"Queues"} }; + my $BaseQueue = $Param{"Queue"}; my $BaseQueueID = $Param{"QueueID"}; # Get subqueues - my @subqueues = grep { index($Queues{$_}, $BaseQueue . "::") >= 0} keys %Queues; + my @subqueues = grep { index( $Queues{$_}, $BaseQueue . "::" ) >= 0 } keys %Queues; my $level = () = $BaseQueue =~ /::/g; $level = $level + 1; - + # Remove subsubqueues - @subqueues = grep { (() = $Queues{$_} =~ /::/g) == $level} @subqueues; - + @subqueues = grep { ( () = $Queues{$_} =~ /::/g ) == $level } @subqueues; + # When there are no subqueues, there is no need to create a JS - if (! @subqueues) { + 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"; - } + + 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; + + return $result; } sub LastQueue { - my $Self = shift; + my $Self = shift; my $queue = shift; - my @parts = split("::", $queue); + my @parts = split( "::", $queue ); return $parts[-1]; } @@ -165,7 +210,7 @@ sub Debug { my $Self = shift; my $msg = shift; - print STDERR "\n\nDEBUG => \n$msg\n\n"; + #print STDERR "\n\nDEBUG => \n$msg\n\n"; } 1; diff --git a/NewTicketWizard.sopm b/NewTicketWizard.sopm index b591bf6..74a8699 100755 --- a/NewTicketWizard.sopm +++ b/NewTicketWizard.sopm @@ -1,7 +1,7 @@ NewTicketWizard - 1.2.10 + 1.3.0 3.x.x SeTIC http://www.setic.ufsc.br @@ -17,7 +17,8 @@ Versão 1.1.3 - Link para abrir segundo chamado na tela de finalização da abertura Versão 1.1.4 - Aumento na fonte do botao de enviar Versão 1.2.6 - Painel de navegação de filas - Versão 1.2.9 - Publicacao de manutencoes em progresso + Versão 1.2.9 - Publicacao de manutencoes em progresso + Versão 1.3.0 - Suporte para detecção e auto-encaminhamento em modo autenticado/não autenticado Módulo instalado com sucesso! -- libgit2 0.21.2