Commit 116ecd72e8dfc5a17b54054cbcb13da47644ba67

Authored by Rodrigo Goncalves
1 parent 24cfb9e1
Exists in master

Ajustes para OTRS 6

Showing 38 changed files with 1423 additions and 1234 deletions   Show diff stats
.gitignore 0 → 100644
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +dist/*
1 #!/bin/bash 1 #!/bin/bash
2 LOCAL="$PWD" 2 LOCAL="$PWD"
3 cd /opt/otrs 3 cd /opt/otrs
4 -bin/otrs.Console.pl Dev::Package::Build "$LOCAL"/QueuesPanel.sopm "$LOCAL"/ 4 +bin/otrs.Console.pl Dev::Package::Build "$LOCAL"/src/QueuesPanel.sopm "$LOCAL"/dist/
5 cd $LOCAL 5 cd $LOCAL
CreateOpmUFSC.sh
@@ -1,5 +0,0 @@ @@ -1,5 +0,0 @@
1 -#!/bin/bash  
2 -LOCAL="$PWD"  
3 -cd /opt/otrs  
4 -bin/otrs.Console.pl Dev::Package::Build "$LOCAL"/QueuePanelUFSC.sopm "$LOCAL"/  
5 -cd $LOCAL  
Kernel/Config/Files/QueuesPanel.xml
@@ -1,154 +0,0 @@ @@ -1,154 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8" ?>  
2 -<otrs_config init="Application" version="1.0">  
3 - <ConfigItem Name="CustomerFrontend::Module###QueuesPanel" Required="0" Valid="1">  
4 - <Description>FrontendModuleRegistration for QueuesPanel module.</Description>  
5 - <Group>Ticket</Group>  
6 - <SubGroup>Frontend::Customer::ModuleRegistration</SubGroup>  
7 - <Setting>  
8 - <FrontendModuleReg>  
9 - <Description>Module for choosing main queues to open tickets</Description>  
10 - <NavBarName>QueuesPanel</NavBarName>  
11 - <NavBar>  
12 - <Description>Queues panel</Description>  
13 - <Name>Queues panel</Name>  
14 - <Link>Action=QueuesPanel</Link>  
15 - <NavBar>QueuesPanel</NavBar>  
16 - <Type>Menu</Type>  
17 - <Prio>8400</Prio>  
18 - </NavBar>  
19 -  
20 - <!-- JQueryPlugin for colums -->  
21 - <Loader>  
22 - <JavaScript>thirdparty/hColumns/jquery.hcolumns.min.js</JavaScript>  
23 - <CSS>QueuesPanel.css</CSS>  
24 - <CSS>hColumns/hcolumns.css</CSS>  
25 - <CSS>hColumns/hcolumns-intro.css</CSS>  
26 - <CSS>hColumns/reset.css</CSS>  
27 - </Loader>  
28 - </FrontendModuleReg>  
29 - </Setting>  
30 - </ConfigItem>  
31 -  
32 - <ConfigItem Name="PublicFrontend::Module###QueuesPanelPublic" Required="0" Valid="1">  
33 - <Description>FrontendModuleRegistration for QueuesPanelPublic module.</Description>  
34 - <Group>Framework</Group>  
35 - <SubGroup>Frontend::Public::ModuleRegistration</SubGroup>  
36 - <Setting>  
37 - <FrontendModuleReg>  
38 - <Description>Module for choosing main queues to open tickets</Description>  
39 - <NavBarName>QueuesPanel</NavBarName>  
40 - <NavBar>  
41 - <Description>Queues panel</Description>  
42 - <Name>Queues panel</Name>  
43 - <Link>Action=QueuesPanelPublic</Link>  
44 - <NavBar>QueuesPanel</NavBar>  
45 - <Type>Menu</Type>  
46 - <Prio>8400</Prio>  
47 - </NavBar>  
48 - <!-- JQueryPlugin for colums -->  
49 - <Loader>  
50 - <JavaScript>thirdparty/hColumns/jquery.hcolumns.min.js</JavaScript>  
51 - <CSS>QueuesPanel.css</CSS>  
52 - <CSS>hColumns/hcolumns.css</CSS>  
53 - <CSS>hColumns/hcolumns-intro.css</CSS>  
54 - <CSS>hColumns/reset.css</CSS>  
55 - </Loader>  
56 - </FrontendModuleReg>  
57 - </Setting>  
58 - </ConfigItem>  
59 -  
60 -  
61 - <ConfigItem Name="Ticket::Frontend::Customer::QueuesPanel###MessageChooseQueuePublic"  
62 - Required="0" Valid="1">  
63 - <Description>Message to let the user choose a queue.</Description>  
64 - <Group>Ticket</Group>  
65 - <SubGroup>Frontend::Customer::QueuesPanel</SubGroup>  
66 - <Setting>  
67 - <String Regex="">Escolha o local para o qual deseja atendimento</String>  
68 - </Setting>  
69 - </ConfigItem>  
70 -  
71 - <ConfigItem Name="Ticket::Frontend::Customer::QueuesPanel###MessageChooseQueue"  
72 - Required="0" Valid="1">  
73 - <Description>Message to let the user choose a queue.</Description>  
74 - <Group>Ticket</Group>  
75 - <SubGroup>Frontend::Customer::QueuesPanel</SubGroup>  
76 - <Setting>  
77 - <String Regex="">Escolha o local para o qual deseja atendimento</String>  
78 - </Setting>  
79 - </ConfigItem>  
80 -  
81 - <ConfigItem Name="Ticket::Frontend::Customer::QueuesPanel###IgnoreQueuesIDs"  
82 - Required="0" Valid="1">  
83 - <Description>Queues IDs to not show in panel (comma separated).</Description>  
84 - <Group>Ticket</Group>  
85 - <SubGroup>Frontend::Customer::QueuesPanel</SubGroup>  
86 - <Setting>  
87 - <String Regex=""></String>  
88 - </Setting>  
89 - </ConfigItem>  
90 -  
91 - <ConfigItem Name="Ticket::Frontend::Customer::QueuesPanel###CustomHeaderFooterID"  
92 - Required="0" Valid="1">  
93 - <Description>Customer footer/header suffix, if used.</Description>  
94 - <Group>Ticket</Group>  
95 - <SubGroup>Frontend::Customer::QueuesPanel</SubGroup>  
96 - <Setting>  
97 - <String Regex=""></String>  
98 - </Setting>  
99 - </ConfigItem>  
100 -  
101 - <ConfigItem Name="Ticket::Frontend::Customer::QueuesPanel###ExtraQueues"  
102 - Required="0" Valid="1">  
103 - <Description>Extra queues to show in panel. Format: One per Line, Name|URL</Description>  
104 - <Group>Ticket</Group>  
105 - <SubGroup>Frontend::Customer::QueuesPanel</SubGroup>  
106 - <Setting>  
107 - <TextArea></TextArea>  
108 - </Setting>  
109 - </ConfigItem>  
110 -  
111 - <ConfigItem Name="Ticket::Frontend::Customer::QueuesPanel###ExtraQueuesPublic"  
112 - Required="0" Valid="1">  
113 - <Description>Extra queues to show in panel, for public access. Format: One per Line, Name|URL</Description>  
114 - <Group>Ticket</Group>  
115 - <SubGroup>Frontend::Customer::QueuesPanel</SubGroup>  
116 - <Setting>  
117 - <TextArea></TextArea>  
118 - </Setting>  
119 - </ConfigItem>  
120 -  
121 - <ConfigItem Name="Ticket::Frontend::Customer::QueuesPanel###CustomJS"  
122 - Required="0" Valid="1">  
123 - <Description>Extra JS if necessary</Description>  
124 - <Group>Ticket</Group>  
125 - <SubGroup>Frontend::Customer::QueuesPanel</SubGroup>  
126 - <Setting>  
127 - <TextArea></TextArea>  
128 - </Setting>  
129 - </ConfigItem>  
130 -  
131 -  
132 -  
133 - <ConfigItem Name="Ticket::Frontend::Customer::QueuesPanel###NewTicketURL"  
134 - Required="0" Valid="1">  
135 - <Description>Base URL to call to create ticket, queue ID added to the end</Description>  
136 - <Group>Ticket</Group>  
137 - <SubGroup>Frontend::Customer::QueuesPanel</SubGroup>  
138 - <Setting>  
139 - <String>/otrs/customer.pl?Action=NewTicketWizard;QueueID=</String>  
140 - </Setting>  
141 - </ConfigItem>  
142 -  
143 - <ConfigItem Name="Ticket::Frontend::Customer::QueuesPanel###NewTicketURLPublic"  
144 - Required="0" Valid="1">  
145 - <Description>Base URL to call to create ticket, queue ID added to the end</Description>  
146 - <Group>Ticket</Group>  
147 - <SubGroup>Frontend::Customer::QueuesPanel</SubGroup>  
148 - <Setting>  
149 - <String>/otrs/public.pl?Action=NewTicketWizardPublic;QueueID=</String>  
150 - </Setting>  
151 - </ConfigItem>  
152 -  
153 -  
154 -</otrs_config>  
155 \ No newline at end of file 0 \ No newline at end of file
Kernel/Language/pt_BR_QueuesPanel.pm
@@ -1,38 +0,0 @@ @@ -1,38 +0,0 @@
1 -# Kernel/Modules/pt_BR_QueuesPanel.pm - translations for QueuesPanel  
2 -#  
3 -# Copyright (C) 2014 SeTIC - UFSC - http://setic.ufsc.br/  
4 -# Version 01/08/2015 - Adjustments for OTRS 4  
5 -#  
6 -# --  
7 -# This software comes with ABSOLUTELY NO WARRANTY. For details, see  
8 -# the enclosed file COPYING for license information (AGPL). If you  
9 -# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.  
10 -# --  
11 -package Kernel::Language::pt_BR_QueuesPanel;  
12 -  
13 -use strict;  
14 -use warnings;  
15 -use utf8;  
16 -  
17 -sub Data {  
18 - my $Self = shift;  
19 -  
20 - $Self->{Translation}->{'The following maintenances are in progress'} = 'As seguintes manutenções estão ocorrendo';  
21 - $Self->{Translation}->{'Started at: '} = 'Iniciada em:';  
22 - $Self->{Translation}->{'Queues panel'} = 'Novo chamado';  
23 - $Self->{Translation}->{'Choose the service to ask for support'} = 'Escolha o servi&ccedil;o para o qual deseja suporte';  
24 - $Self->{Translation}->{'Message to let the user choose a queue.'} = 'Mensagem para o usuário escolher a fila';  
25 - $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)';  
26 - $Self->{Translation}->{'Customer footer/header suffix, if used.'} = 'Sufixo personalizado de cabeçalho/rodapé, se usado';  
27 - $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';  
28 - $Self->{Translation}->{'Extra queues to show in panel. Format: One per Line, Name|URL'} = 'Filas extra, com URLs especiais. Formato: Nome|URL';  
29 - $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';  
30 -  
31 -  
32 -  
33 -  
34 -  
35 -  
36 - return 1;  
37 -}  
38 -1;  
39 \ No newline at end of file 0 \ No newline at end of file
Kernel/Language/pt_BR_QueuesPanelPublic.pm
@@ -1,27 +0,0 @@ @@ -1,27 +0,0 @@
1 -# Kernel/Modules/pt_BR_QueuesPanelPublic.pm - translations for QueuesPanelPublic  
2 -#  
3 -# Copyright (C) 2014 SeTIC - UFSC - http://setic.ufsc.br/  
4 -# Version 01/08/2015 - Adjustments for OTRS 4  
5 -#  
6 -# --  
7 -# --  
8 -# This software comes with ABSOLUTELY NO WARRANTY. For details, see  
9 -# the enclosed file COPYING for license information (AGPL). If you  
10 -# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.  
11 -# --  
12 -package Kernel::Language::pt_BR_QueuesPanelPublic;  
13 -  
14 -use strict;  
15 -use warnings;  
16 -use utf8;  
17 -  
18 -sub Data {  
19 - my $Self = shift;  
20 -  
21 - $Self->{Translation}->{'The following maintenances are in progress'} = 'As seguintes manutenções estão ocorrendo';  
22 - $Self->{Translation}->{'Started at: '} = 'Iniciada em:';  
23 - $Self->{Translation}->{'Queues panel'} = 'Novo chamado';  
24 - $Self->{Translation}->{'Choose the service to ask for support'} = 'Escolha o servi&ccedil;o para o qual deseja suporte';  
25 - return 1;  
26 -}  
27 -1;  
28 \ No newline at end of file 0 \ No newline at end of file
Kernel/Modules/QueuesPanel.pm
@@ -1,71 +0,0 @@ @@ -1,71 +0,0 @@
1 -# --  
2 -# Kernel/Modules/QueuesPanel.pm - frontend module for choosing top queues  
3 -#  
4 -# Copyright (C) SeTIC - UFSC - http://setic.ufsc.br/  
5 -# Version 01/08/2015 - Support for OTRS 4.0.3  
6 -#  
7 -# --  
8 -# This software comes with ABSOLUTELY NO WARRANTY. For details, see  
9 -# the enclosed file COPYING for license information (AGPL). If you  
10 -# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.  
11 -# --  
12 -package Kernel::Modules::QueuesPanel;  
13 -  
14 -use strict;  
15 -use warnings;  
16 -  
17 -use Kernel::System::VariableCheck qw(:all);  
18 -  
19 -our @ObjectDependencies = (  
20 -"Kernel::System::Web::Request",  
21 -"Kernel::System::DB",  
22 -"Kernel::Output::HTML::Layout",  
23 -"KerneL::System::Log",  
24 -"Kernel::Config",  
25 -"Kernel::System::Queue",  
26 -"Kernel::System::QueuesPanel");  
27 -  
28 -sub new {  
29 - my ( $Type, %Param ) = @_;  
30 -  
31 - # allocate new hash for object  
32 - my $Self = {%Param};  
33 - bless( $Self, $Type );  
34 -  
35 - return $Self;  
36 -}  
37 -  
38 -sub Run {  
39 - my ( $Self, %Param ) = @_;  
40 - my %Data = ();  
41 -  
42 - my $ConfigObject = $Kernel::OM->Get("Kernel::Config");  
43 - my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout");  
44 -  
45 - $Self->{Config} = $ConfigObject->Get("Ticket::Frontend::Customer::QueuesPanel");  
46 - my $msgChooseService = $Self->{Config}->{"MessageChooseQueue"};  
47 - my $ignoreQueuesIDs = $Self->{Config}->{"IgnoreQueuesIDs"};  
48 - my $customHeaderFooterID = $Self->{Config}->{"CustomHeaderFooterID"};  
49 - my $extraQueues = $Self->{Config}->{"ExtraQueues"};  
50 - my $URL = $Self->{Config}->{"NewTicketURL"};  
51 - my $customJS = $Self->{Config}->{"CustomJS"};  
52 -  
53 - my $queuesPanelBuilder = $Kernel::OM->Get("Kernel::System::QueuesPanel");  
54 -  
55 - $Data{"CustomJS"} = $customJS;  
56 - $Data{"QueueJS"} = $queuesPanelBuilder->BuildQueuesJS(IgnoreQueuesIDs => $ignoreQueuesIDs, ExtraQueues => $extraQueues, URL => $URL);  
57 -  
58 - $Data{MsgChooseQueue} = $msgChooseService;  
59 -  
60 - # build output  
61 - my $Output = $LayoutObject->CustomerHeader( Type => $customHeaderFooterID, Title => $LayoutObject->{LanguageObject}->Translate("Queues panel") );  
62 -  
63 - $Output .= $LayoutObject->Output(  
64 - Data => \%Data,  
65 - TemplateFile => 'QueuesPanel',  
66 - );  
67 - $Output .= $LayoutObject->CustomerFooter(Type => $customHeaderFooterID);  
68 - return $Output;  
69 -}  
70 -  
71 -1;  
Kernel/Modules/QueuesPanelPublic.pm
@@ -1,91 +0,0 @@ @@ -1,91 +0,0 @@
1 -# --  
2 -# Kernel/Modules/QueuesPanelPublic.pm - frontend module for choosing top queues  
3 -#  
4 -# Copyright (C) SeTIC - UFSC - http://setic.ufsc.br/  
5 -# Version 01/12/2015 - Support for OTRS 4.0.3  
6 -#  
7 -# --  
8 -# This software comes with ABSOLUTELY NO WARRANTY. For details, see  
9 -# the enclosed file COPYING for license information (AGPL). If you  
10 -# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.  
11 -# --  
12 -package Kernel::Modules::QueuesPanelPublic;  
13 -  
14 -use strict;  
15 -use warnings;  
16 -  
17 -use Kernel::System::VariableCheck qw(:all);  
18 -  
19 -our @ObjectDependencies = (  
20 -"Kernel::System::Web::Request", # OLD ParamObject  
21 -"Kernel::System::DB",  
22 -"Kernel::Output::HTML::Layout",  
23 -"KerneL::System::Log",  
24 -"Kernel::Config",  
25 -"Kernel::System::Queue",  
26 -"Kernel::System::QueuesPanel");  
27 -  
28 -sub new {  
29 - my ( $Type, %Param ) = @_;  
30 -  
31 - # allocate new hash for object  
32 - my $Self = {%Param};  
33 - bless( $Self, $Type );  
34 -  
35 - return $Self;  
36 -}  
37 -  
38 -sub Run {  
39 - my ( $Self, %Param ) = @_;  
40 - my %Data = ();  
41 -  
42 - my $ParamObject = $Kernel::OM->Get("Kernel::System::Web::Request");  
43 - my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout");  
44 - my $ConfigObject = $Kernel::OM->Get("Kernel::Config");  
45 -  
46 - ## Se recebeu o ticket, significa que usuario já está autenticado  
47 - if ( $ParamObject->GetParam( Param => "ticket" ) ) {  
48 - my $retorno = $LayoutObject->Redirect( OP => "Action=QueuesPanel", );  
49 - $retorno =~ s/public/customer/g;  
50 - return $retorno;  
51 - }  
52 -  
53 - ## Se tiver parametro para tentar autenticar, repassa ao CAS com gateway  
54 - if ( $ParamObject->GetParam( Param => "autenticar" ) ) {  
55 - my $url =  
56 - $ConfigObject->Get('Customer::AuthModule::CAS::CASUrl')  
57 - . "/login?gateway=true&service="  
58 - . "https://"  
59 - . $ENV{SERVER_NAME}  
60 - . $ENV{SCRIPT_NAME}  
61 - . "?Action=QueuesPanelPublic";  
62 - return $LayoutObject->Redirect( ExtURL => $url, );  
63 - }  
64 -  
65 - $Self->{Config} = $Self->{ConfigObject}->Get("Ticket::Frontend::Customer::QueuesPanel");  
66 - my $msgChooseService = $Self->{Config}->{"MessageChooseQueuePublic"};  
67 - my $ignoreQueuesIDs = $Self->{Config}->{"IgnoreQueuesIDs"};  
68 - my $customHeaderFooterID = $Self->{Config}->{"CustomHeaderFooterID"};  
69 - my $extraQueues = $Self->{Config}->{"ExtraQueuesPublic"};  
70 - my $URL = $Self->{Config}->{"NewTicketURLPublic"};  
71 - my $customJS = $Self->{Config}->{"CustomJS"};  
72 -  
73 - my $queuesPanelBuilder = $Kernel::OM->Get("Kernel::System::QueuesPanel");  
74 -  
75 - $Data{"CustomJS"} = $customJS;  
76 - $Data{"QueueJS"} = $queuesPanelBuilder->BuildQueuesJS(IgnoreQueuesIDs => $ignoreQueuesIDs, ExtraQueues => $extraQueues, URL => $URL);  
77 - $Data{MsgChooseQueue} = $msgChooseService;  
78 -  
79 - # build output  
80 - my $Output =  
81 - $LayoutObject->CustomerHeader( Type => $customHeaderFooterID, Title => $LayoutObject->{LanguageObject}->Translate("New ticket") );  
82 -  
83 - $Output .= $LayoutObject->Output(  
84 - Data => \%Data,  
85 - TemplateFile => 'QueuesPanel',  
86 - );  
87 - $Output .= $LayoutObject->CustomerFooter(Type => $customHeaderFooterID);  
88 - return $Output;  
89 -}  
90 -  
91 -1;  
Kernel/Output/HTML/Templates/Standard/CustomerFooterQPUFSC.tt
@@ -1,33 +0,0 @@ @@ -1,33 +0,0 @@
1 -# --  
2 -# CustomerFooterQPUFSC.tt - Footer para Queues Panel na UFSC  
3 -# Copyright (C) 2001-2014 OTRS AG, http://otrs.com/  
4 -# --  
5 -# This software comes with ABSOLUTELY NO WARRANTY. For details, see  
6 -# the enclosed file COPYING for license information (AGPL). If you  
7 -# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.  
8 -# --  
9 -  
10 -<div id="footerF" align="center" style="bottom: 10px; width: 100%; margin-top: 18px; margin-bottom: 8px;" class="noPrint">  
11 -  
12 -<div style="font-size: 0px;">  
13 -<div style="height: 2px; width: 100%; background-image: url('/otrs-web/skins/Customer/default/images/queues-panel/separador.gif'); background-repeat: repeat-x; background-position: 0 50%;"></div>  
14 -</div>  
15 - <br><a href="http://www.setic.ufsc.br" target="_blank"><img src="/otrs-web/skins/Customer/default/images/queues-panel/setic.png" style="border-style: none"></a>  
16 - <br>  
17 - <div style="margin-top: 4px;"><span style="color: #BBBBBB;">© SeTIC - Superintendência de Governança Eletrônica e Tecnologia da Informação e Comunicação</span>  
18 - </div>  
19 - <div id="Footer" class="ARIARoleContentinfo">  
20 -[% RenderBlockStart("Banner") %]  
21 - <a href="http://www.otrs.com/" title="[% Config("Product") %] [% Config("Version") %]" target="_blank">[% Translate("Powered by") | html %] [% Config("Product") %] [% Config("Version").remove('\.0\..*') %]</a>  
22 -[% RenderBlockEnd("Banner") %]  
23 - <div class="Clear"></div>  
24 -</div>  
25 -</div>  
26 -  
27 -  
28 -  
29 -  
30 -[% InsertTemplate("CustomerFooterJS.tt") %]  
31 -  
32 -</body>  
33 -</html>  
Kernel/Output/HTML/Templates/Standard/CustomerHTMLHeadQPUFSC.tt
@@ -1,159 +0,0 @@ @@ -1,159 +0,0 @@
1 -# --  
2 -# CustomerHTMLHeadUFSC.tt - provides FSC global HTML header  
3 -# Copyright (C) 2015, SeTIC - UFSC - http://setic.ufsc.br/  
4 -# --  
5 -# This software comes with ABSOLUTELY NO WARRANTY. For details, see  
6 -# the enclosed file COPYING for license information (AGPL). If you  
7 -# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.  
8 -# --  
9 -<head>  
10 - <meta http-equiv="Content-type" content="text/html;charset=utf-8" />  
11 -[% RenderBlockStart("MetaHttpEquivRefresh") %]  
12 -[% INCLUDE "HTMLHeadRefresh.tt" %]  
13 -[% RenderBlockEnd("MetaHttpEquivRefresh") %]  
14 -[% RenderBlockStart("MetaLink") %]  
15 - <link rel="[% Data.Rel | html %]" type="[% Data.Type | html %]" title="[% Data.Title | html %]" href="[% Data.Href %]" />  
16 -[% RenderBlockEnd("MetaLink") %]  
17 - <link rel="shortcut icon" href="[% Config("Frontend::ImagePath") %]icons/product.ico" type="image/ico" />  
18 -  
19 -[% RenderBlockStart("CommonCSS") %]  
20 - <link rel="stylesheet" type="text/css" href="[% Config("Frontend::WebPath") %]skins/Customer/[% Data.Skin | uri %]/[% Data.CSSDirectory | html %]/[% Data.Filename | html %]" />  
21 -[% RenderBlockEnd("CommonCSS") %]  
22 -  
23 -[% RenderBlockStart("CommonCSS_IE8") %]  
24 -<!--[if IE 7]>  
25 - <link rel="stylesheet" type="text/css" href="[% Config("Frontend::WebPath") %]skins/Customer/[% Data.Skin | uri %]/[% Data.CSSDirectory | html %]/[% Data.Filename | html %]" />  
26 - <![endif]-->  
27 -[% RenderBlockEnd("CommonCSS_IE8") %]  
28 -  
29 -[% RenderBlockStart("ModuleCSS") %]  
30 - <link rel="stylesheet" type="text/css" href="[% Config("Frontend::WebPath") %]skins/Customer/[% Data.Skin | uri %]/[% Data.CSSDirectory | html %]/[% Data.Filename | html %]" />  
31 -[% RenderBlockEnd("ModuleCSS") %]  
32 -  
33 -[% RenderBlockStart("ModuleCSS_IE8") %]  
34 -<!--[if IE 7]>  
35 - <link rel="stylesheet" type="text/css" href="[% Config("Frontend::WebPath") %]skins/Customer/[% Data.Skin | uri %]/[% Data.CSSDirectory | html %]/[% Data.Filename | html %]" />  
36 - <![endif]-->  
37 -[% RenderBlockEnd("ModuleCSS_IE8") %]  
38 -  
39 - <link rel="stylesheet" type="text/css" href="[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/ui-theme/jquery-ui.css" />  
40 - <link rel="stylesheet" type="text/css" href="[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/jstree-theme/default/style.css" />  
41 -  
42 -[% RenderBlockStart("HeaderLogoCSS") %]  
43 - <style type="text/css">  
44 - #Header #Logo {  
45 - background-image: [% Data.URL | html %];  
46 - top: [% Data.StyleTop | html %];  
47 - right: [% Data.StyleRight | html %];  
48 - width: [% Data.StyleWidth | html %];  
49 - height: [% Data.StyleHeight | html %];  
50 - }  
51 - </style>  
52 -[% RenderBlockEnd("HeaderLogoCSS") %]  
53 -  
54 - <style type="text/css">  
55 - @font-face {  
56 - font-family: 'FontAwesome';  
57 - src: url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.eot?v=4.1.0');  
58 - src: url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'),  
59 - url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.woff?v=4.1.0') format('woff'),  
60 - url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.ttf?v=4.1.0') format('truetype'),  
61 - url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.svg#fontawesomeregular?v=4.1.0') format('svg');  
62 - font-weight: normal;  
63 - font-style: normal;  
64 - }  
65 -  
66 - /* Fix poor font rendering on chrome based browsers on windows */  
67 - @media all and (-webkit-min-device-pixel-ratio:0) {  
68 - @font-face {  
69 - font-family: 'FontAwesome';  
70 - src: url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.svg#fontawesomeregular') format('svg'),  
71 - url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'),  
72 - url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.woff?v=4.1.0') format('woff'),  
73 - url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.ttf?v=4.1.0') format('truetype');  
74 - font-weight: normal;  
75 - font-style: normal;  
76 - }  
77 - }  
78 - </style>  
79 -  
80 -<!--[if IE 8]>  
81 - <script type="text/javascript">  
82 - /* Fix initial font rendering on IE8 for FontAwesome */  
83 - (function() {  
84 - var head = document.getElementsByTagName('head')[0],  
85 - style = document.createElement('style');  
86 - style.type = 'text/css';  
87 - style.styleSheet.cssText = ':before,:after{content:none !important;}';  
88 - head.appendChild(style);  
89 - setTimeout(function(){  
90 - head.removeChild(style);  
91 - }, 0);  
92 - }());  
93 - </script>  
94 - <![endif]-->  
95 -  
96 - <style type="text/css">  
97 - #header {  
98 - height: 90px;  
99 - background-image: url("/otrs-web/skins/Customer/default/images/queues-panel/cabecalhoUFSC.jpg");  
100 - background-position: bottom left;  
101 - padding-left: 30px;  
102 - padding-top: 0px;  
103 - font-family: Verdana, Arial, sans-serif;  
104 - margin-bottom: 20px;  
105 - }  
106 -  
107 - .tabstyles {  
108 - border-collapse: separate;  
109 - display: inline;  
110 - font-family: Verdana, Arial, sans-serif;  
111 - font-size: 11px;  
112 - height: auto;  
113 - margin-bottom: 0px;  
114 - margin-left: 0px;  
115 - margin-right: 0px;  
116 - margin-top: 0px;  
117 - padding-bottom: 0px;  
118 - padding-left: 0px;  
119 - padding-right: 0px;  
120 - padding-top: 0px;  
121 - width: auto;  
122 -vertical-align: bottom;  
123 - }  
124 -  
125 - .atalhoMenuLogo {  
126 - text-align: right;  
127 - vertical-align: bottom;  
128 - color: #0000ee;  
129 - }  
130 -  
131 - .titleText {  
132 - FONT-SIZE: 16px;  
133 - FONT-WEIGHT: bold;  
134 - FONT-FAMILY: Arial, Helvetica, sans-serif;  
135 - text-align: left;  
136 - margin-left: 10px;  
137 -}  
138 -  
139 - body {  
140 - background: white;  
141 - FONT-FAMILY: Arial, Helvetica, sans-serif;  
142 - text-align: left;  
143 - font-size: 12px;  
144 -}  
145 - }  
146 -  
147 -  
148 -  
149 - </style>  
150 -  
151 -  
152 - <title>[% Data.TitleArea | html %] [% Config("ProductName") %]</title>  
153 -  
154 -  
155 -  
156 -  
157 -[% INCLUDE "HTMLHeadBlockEvents.tt" %]  
158 -  
159 -</head>  
Kernel/Output/HTML/Templates/Standard/CustomerHeaderQPUFSC.tt
@@ -1,40 +0,0 @@ @@ -1,40 +0,0 @@
1 -# --  
2 -# CustomerHeaderQPUFSC.tt - provides global HTML header for UFSC  
3 -# Copyright (C) 2015, SeTIC - UFSC - http://setic.ufsc.br/  
4 -# --  
5 -# This software comes with ABSOLUTELY NO WARRANTY. For details, see  
6 -# the enclosed file COPYING for license information (AGPL). If you  
7 -# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.  
8 -# --  
9 -[%- INCLUDE "HTTPHeaders.tt" -%]  
10 -  
11 -<!DOCTYPE html>  
12 -<html>  
13 -[% InsertTemplate("Copyright.tt") %]  
14 -[% InsertTemplate("CustomerHTMLHeadQPUFSC.tt") %]  
15 -  
16 -  
17 -<body class="NoJavaScript">  
18 - <div id="header" class="noPrint">  
19 - <table border="0" width="100%">  
20 - <tbody>  
21 - <tr style="height: 88px; vertical-align: bottom;">  
22 - <td class="atalhoMenuLogo"><span class="tabstyles">  
23 - <a href="http://servicosti.ufsc.br/">Catálogo de serviços</a> | <a href="/otrs/customer.pl?Action=CustomerTicketOverview">Meus chamados</a></span>  
24 - </td>  
25 - </tr>  
26 - </tbody>  
27 - </table>  
28 - </div>  
29 -  
30 -<table id="titulo" width="100%" cellpadding="0" cellspacing="0">  
31 - <tbody><tr>  
32 - <td align="left" valign="top"><span class="titleText">PAI - <span style="font-weight: bolder">P</span>ortal de <span style="font-weight: bolder">A</span>tendimento <span style="font-weight: bolder">I</span>nstitucional</span></td>  
33 - <td align="left" valign="top" width="1"></td>  
34 - </tr>  
35 - </tbody></table>  
36 -<div style="font-size: 0px;">  
37 -<div style="height: 2px; width: 100%; background-image: url('/otrs-web/skins/Customer/default/images/queues-panel/separador.gif'); background-repeat: repeat-x; background-position: 0 50%;"></div>  
38 -</div>  
39 -  
40 -<!-- end header -->  
Kernel/Output/HTML/Templates/Standard/QueuesPanel.tt
@@ -1,39 +0,0 @@ @@ -1,39 +0,0 @@
1 -# --  
2 -# Kernel/Output/HTML/Standard/QueuesPanel.tt - overview  
3 -#  
4 -# Copyright (C) SeTIC - UFSC - http://setic.ufsc.br/  
5 -# Version 01/12/2015 - Support for OTRS 4.0.3  
6 -#  
7 -# --  
8 -# $Id: writing-otrs-application.xml,v 1.1 2010/08/13 08:59:28 mg Exp $  
9 -# --  
10 -# This software comes with ABSOLUTELY NO WARRANTY. For details, see  
11 -# the enclosed file COPYING for license information (AGPL). If you  
12 -# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.  
13 -# --  
14 -<div id="Queues" class="Queues">  
15 - <div class="ChooseQueue">[% Data.MsgChooseQueue %]</div>  
16 -  
17 - <div id="columns"></div>  
18 -  
19 - [% RenderBlockStart("ListQueue") %]  
20 - <div class="QueueCard">  
21 - <div class="QueueTitle"><a class="QueueTitleLink" href="[% Env("Baselink") %]Action=NewTicketWizard;BaseQueueID=[% Data.QueueID %]">[% Data.QueueName %]</a></div>  
22 - <div class="QueueComments">[% Data.QueueComments %]</div>  
23 - </div>  
24 -  
25 -[% RenderBlockEnd("ListQueue") %]  
26 -  
27 -</div>  
28 -  
29 -[% WRAPPER JSOnDocumentComplete %]  
30 -<script type="text/javascript">  
31 - [% Data.QueueJS %]  
32 -  
33 -  
34 - [% Data.CustomJS %]  
35 -  
36 -</script>  
37 -[% END %]  
38 -  
39 -  
40 \ No newline at end of file 0 \ No newline at end of file
Kernel/System/QueuesPanel.pm
@@ -1,212 +0,0 @@ @@ -1,212 +0,0 @@
1 -# --  
2 -# Kernel/System/QueuesPanel.pm - logic for queues panel module  
3 -#  
4 -# Copyright (C) SeTIC - UFSC - http://setic.ufsc.br/  
5 -# Version 29/10/2015 - First version  
6 -#  
7 -# --  
8 -# This software comes with ABSOLUTELY NO WARRANTY. For details, see  
9 -# the enclosed file COPYING for license information (AGPL). If you  
10 -# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.  
11 -# --  
12 -package Kernel::System::QueuesPanel;  
13 -  
14 -use strict;  
15 -use warnings;  
16 -  
17 -use Kernel::System::VariableCheck qw(:all);  
18 -use Data::Dumper;  
19 -  
20 -our @ObjectDependencies = (  
21 -"Kernel::System::DB",  
22 -"KerneL::System::Log",  
23 -"Kernel::System::Queue");  
24 -  
25 -sub new {  
26 - my ( $Type, %Param ) = @_;  
27 -  
28 - # allocate new hash for object  
29 - my $Self = {%Param};  
30 - bless( $Self, $Type );  
31 -  
32 - return $Self;  
33 -}  
34 -  
35 -  
36 -=head  
37 -  
38 -Builds the JavaScript for the Queues Panel component (jQuery hColumns)  
39 -  
40 -Params: IgnoreQueuesID - comma-separated list of queues to ignore  
41 - ExtraQueues - line-break separated list of extra queues to include. Each line has a name for the queue and a link, separated by "||" - example:  
42 - SeTIC||http://setic.ufsc.br  
43 -  
44 -=cut  
45 -sub BuildQueuesJS {  
46 - my ( $Self, %Param ) = @_;  
47 -  
48 - # Get queues  
49 - my %Queues = ();  
50 - my %ExtraQueuesLinks = ();  
51 -  
52 - my $DBObject = $Kernel::OM->Get("Kernel::System::DB");  
53 -  
54 - if ($Param{IgnoreQueuesIDs}) {  
55 - $DBObject->Prepare( SQL => "SELECT id, name FROM queue WHERE valid_id = 1 AND id NOT IN (" . $Param{IgnoreQueuesIDs} . ") ORDER BY name ASC", );  
56 - } else {  
57 - $DBObject->Prepare( SQL => "SELECT id, name FROM queue WHERE valid_id = 1 ORDER BY name ASC", );  
58 - }  
59 -  
60 - while ( my @Row = $DBObject->FetchrowArray() ) {  
61 - $Queues{ $Row[0] } = $Row[1];  
62 - }  
63 -  
64 -  
65 - if ($Param{ExtraQueues}) {  
66 - my @extraQueues = split('\n', $Param{ExtraQueues});  
67 - my $id = -1;  
68 - foreach my $extraQueue (@extraQueues) {  
69 - my @data = split('\|', $extraQueue);  
70 - $Queues{$id} = $data[0];  
71 - $ExtraQueuesLinks{$id} = $data[1];  
72 - $id = $id - 1;  
73 - }  
74 - }  
75 -  
76 - my $result =  
77 - '$(document).ready(function() {' . "\n\t"  
78 - . ' $("#columns").hColumns({'  
79 - . "\n\t\t"  
80 - . ' nodeSource: function(node_id, callback) {' . "\n";  
81 -  
82 - for my $queue ( keys %Queues ) {  
83 - $result = $result . $Self->BuildQueueJS( Queues => \%Queues, Queue => $Queues{$queue}, QueueID => $queue, ExtraQueuesLinks => \%ExtraQueuesLinks, URL =>  
84 - $Param{URL} );  
85 - }  
86 -  
87 - $result = $result . $Self->BuildTopQueuesJS( Queues => \%Queues, ExtraQueuesLinks => \%ExtraQueuesLinks, URL =>  
88 - $Param{URL} );  
89 -  
90 - $result = $result . "\n\t}});\n});";  
91 -  
92 - return $result;  
93 -}  
94 -  
95 -=head  
96 -  
97 -Builds the top level queues JavaScript  
98 -  
99 -Params: Queues - queues list  
100 - ExtraQueuesLinks - links for custom (id < 0) queues  
101 -  
102 -=cut  
103 -sub BuildTopQueuesJS {  
104 - my ( $Self, %Param ) = @_;  
105 - my %Queues = %{ $Param{"Queues"} };  
106 - my %ExtraQueuesLinks = %{ $Param{"ExtraQueuesLinks"} };  
107 -  
108 - my @topQueues = grep { index( $Queues{$_}, '::' ) == -1 } keys %Queues;  
109 -  
110 - my $result = "\t\tif (node_id === null) { \n\t\t\treturn callback(null, [\n";  
111 - for my $queue (sort {$Queues{$a} cmp $Queues{$b}} @topQueues) {  
112 -  
113 - if ( grep { index( $Queues{$_}, $Queues{$queue} . "::" ) >= 0 } keys %Queues ) {  
114 - $result = $result  
115 - . "\t\t\t\t"  
116 - . '{ id: '  
117 - . $queue  
118 - . ', label: "'  
119 - . $Self->LastQueue( $Queues{$queue} )  
120 - . '", type: "folder" },' . "\n";  
121 - }  
122 - else {  
123 - $result = $result  
124 - . "\t\t\t\t"  
125 - . '{ id: '  
126 - . $queue  
127 - . ', label: "'  
128 - . $Self->LastQueue( $Queues{$queue} )  
129 - . '", type: "link", url: "'  
130 - . ($queue < 0 ? $ExtraQueuesLinks{$queue} : $Param{"URL"} . $queue)  
131 - . '" },' . "\n";  
132 - }  
133 - }  
134 -  
135 - $result = $result . "\t\t\t]);\n\t\t}\n";  
136 -  
137 - return $result;  
138 -}  
139 -  
140 -=head  
141 -  
142 -Builds sub-queues JavaScript  
143 -  
144 -Params: Queues - queues list  
145 - ExtraQueuesLinks - links for custom (id < 0) queues  
146 - BaseQueue / BaseQueueID - which upper queue to generate subqueues  
147 -  
148 -=cut  
149 -sub BuildQueueJS {  
150 - my ( $Self, %Param ) = @_;  
151 - my %Queues = %{ $Param{"Queues"} };  
152 - my $BaseQueue = $Param{"Queue"};  
153 - my $BaseQueueID = $Param{"QueueID"};  
154 - my %ExtraQueuesLinks = %{ $Param{"ExtraQueuesLinks"} };  
155 -  
156 - # Get subqueues  
157 - my @subqueues = grep { index( $Queues{$_}, $BaseQueue . "::" ) >= 0 } keys %Queues;  
158 - my $level = () = $BaseQueue =~ /::/g;  
159 - $level = $level + 1;  
160 -  
161 - # Remove subsubqueues  
162 - @subqueues = grep { ( () = $Queues{$_} =~ /::/g ) == $level } @subqueues;  
163 -  
164 - # When there are no subqueues, there is no need to create a JS  
165 - if ( !@subqueues ) {  
166 - return "";  
167 - }  
168 -  
169 - my $result = "\t\tif (node_id === " . $BaseQueueID . ") { \n\t\t\treturn callback(null, [\n";  
170 -  
171 - for my $queue (sort {$Queues{$a} cmp $Queues{$b}} @subqueues) {  
172 - if ( grep { index( $Queues{$_}, $Queues{$queue} . "::" ) >= 0 } keys %Queues ) {  
173 - $result = $result  
174 - . "\t\t\t\t"  
175 - . '{ id: '  
176 - . $queue  
177 - . ', label: "'  
178 - . $Self->LastQueue( $Queues{$queue} )  
179 - . '", type: "folder" }, ' . "\n";  
180 - }  
181 - else {  
182 - $result = $result  
183 - . "\t\t\t\t"  
184 - . '{ id: '  
185 - . $queue  
186 - . ', label: "'  
187 - . $Self->LastQueue( $Queues{$queue} )  
188 - . '", type: "link", url: "'  
189 - . ($queue < 0 ? $ExtraQueuesLinks{$queue} : $Param{"URL"} . $queue) . '" }, ' . "\n";  
190 - }  
191 - }  
192 -  
193 - $result = $result . "\t\t\t]);\n\t\t}\n";  
194 -  
195 - return $result;  
196 -}  
197 -  
198 -=head  
199 -  
200 -Returns last part of the queue name (strips parent queues)  
201 -  
202 -Params: QueueName  
203 -  
204 -=cut  
205 -sub LastQueue {  
206 - my $Self = shift;  
207 - my $queue = shift;  
208 - my @parts = split( "::", $queue );  
209 - return $parts[-1];  
210 -}  
211 -  
212 -1;  
QueuePanelUFSC.sopm
@@ -1,23 +0,0 @@ @@ -1,23 +0,0 @@
1 -<?xml version="1.0" encoding="utf-8" ?>  
2 -<otrs_package version="1.0">  
3 - <Name>QueuesPanelUFSC</Name>  
4 - <Version>1.1.0</Version>  
5 - <Framework>5.0.x</Framework>  
6 - <Vendor>SeTIC</Vendor>  
7 - <ChangeLog version="1.2.0">Support for OTRS 5.0.x</ChangeLog>  
8 - <URL>http://www.setic.ufsc.br</URL>  
9 - <License>GPLv2</License>  
10 - <Description>Customer header/footer for QueuesPanel module for UFSC</Description>  
11 - <IntroInstall Type="post" Title="Thank you">Module installed successfully!</IntroInstall>  
12 - <Description>New Ticket Wizard</Description>  
13 - <BuildDate>?</BuildDate>  
14 - <BuildHost>?</BuildHost>  
15 - <Filelist>  
16 - <File Permission="644" Location="Kernel/Output/HTML/Templates/Standard/CustomerFooterQPUFSC.tt"></File>  
17 - <File Permission="644" Location="Kernel/Output/HTML/Templates/Standard/CustomerHeaderQPUFSC.tt"></File>  
18 - <File Permission="644" Location="Kernel/Output/HTML/Templates/Standard/CustomerHTMLHeadQPUFSC.tt"></File>  
19 - <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/images/queues-panel/cabecalhoUFSC.jpg"></File>  
20 - <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/images/queues-panel/separador.gif"></File>  
21 - <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/images/queues-panel/setic.png"></File>  
22 - </Filelist>  
23 -</otrs_package>  
24 \ No newline at end of file 0 \ No newline at end of file
QueuesPanel.sopm
@@ -1,40 +0,0 @@ @@ -1,40 +0,0 @@
1 -<?xml version="1.0" encoding="utf-8" ?>  
2 -<otrs_package version="1.0">  
3 - <Name>QueuesPanel</Name>  
4 - <Version>1.2.0</Version>  
5 - <Framework>5.0.x</Framework>  
6 - <Vendor>SeTIC</Vendor>  
7 - <ChangeLog version="1.1.0">Support for custom queues, layout fixes, support for custom layouts for header and footer</ChangeLog>  
8 - <ChangeLog version="1.2.0">Support for OTRS 5.0.x</ChangeLog>  
9 - <URL>http://www.setic.ufsc.br</URL>  
10 - <License>GPLv2</License>  
11 - <Description>Queue choosing panel</Description>  
12 - <IntroInstall Type="post" Title="Thank you">Module installed successfully!</IntroInstall>  
13 - <Description>Queues Panel</Description>  
14 - <BuildDate>?</BuildDate>  
15 - <BuildHost>?</BuildHost>  
16 - <PackageRequired Version="1.1.0">CASAuthentication</PackageRequired>  
17 - <PackageRequired Version="1.5.0">NewTicketWizard</PackageRequired>  
18 - <Filelist>  
19 - <File Permission="644" Location="Kernel/Config/Files/QueuesPanel.xml"></File>  
20 -  
21 - <File Permission="644" Location="Kernel/Language/pt_BR_QueuesPanel.pm"></File>  
22 - <File Permission="644" Location="Kernel/Language/pt_BR_QueuesPanelPublic.pm"></File>  
23 -  
24 - <File Permission="644" Location="Kernel/Modules/QueuesPanel.pm"></File>  
25 - <File Permission="644" Location="Kernel/Modules/QueuesPanelPublic.pm"></File>  
26 -  
27 - <File Permission="644" Location="Kernel/System/QueuesPanel.pm"></File>  
28 -  
29 - <File Permission="644" Location="Kernel/Output/HTML/Templates/Standard/QueuesPanel.tt"></File>  
30 -  
31 - <File Permission="644" Location="var/httpd/htdocs/js/thirdparty/hColumns/jquery.hcolumns.min.js"></File>  
32 -  
33 - <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/hColumns/hcolumns-intro.css"></File>  
34 - <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/hColumns/hcolumns.css"></File>  
35 - <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/hColumns/reset.css"></File>  
36 -  
37 - <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/images/hColumns/glyphicons-halflings.png"></File>  
38 -  
39 - </Filelist>  
40 -</otrs_package>  
README.md 0 → 100644
@@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
  1 +Queues Panel
  2 +==================
  3 +
  4 +Navigational menu to choose the queue where a ticket should be open to.
  5 +
  6 +
  7 +Required PERL Packages:
  8 +-----------------------
  9 +
  10 +
  11 +Required OTRS Packages:
  12 +-----------------------
  13 +
  14 +otrs-bootstrap (https://softwarepublico.gov.br/gitlab/setic-ufsc/otrs-bootstrap)
  15 +
  16 +
  17 +Config required:
  18 +----------------
  19 +
  20 +
  21 + If you want to customize the header or footer, use the following setting to define the templates. Files names
  22 + CustomerFooterQP{CustomTemplate} and CustomerHeaderQP{CustomTemplate} should be made available in OTRS:
  23 +
  24 + $Self->{'Ticket::Frontend::Customer::QueuesPanel###CustomHeaderFooterID'}
  25 +
  26 +
  27 +
  28 +Package building:
  29 +-----------------
  30 +
  31 +To build the package, do the following:
  32 +
  33 + cd dist
  34 + ./CreateOpm.sh
  35 +
  36 +The generated package will be on the same `dist` directory
  37 +
  38 +
  39 +Issues:
  40 +-------
  41 +
  42 +This module was developed in-house and thus is provided without warranty or support. If you have a problem, please open an issue at https://softwarepublico.gov.br/gitlab/setic-ufsc/otrs-cas/
0 \ No newline at end of file 43 \ No newline at end of file
src/Kernel/Config/Files/XML/QueuesPanel.xml 0 → 100644
@@ -0,0 +1,250 @@ @@ -0,0 +1,250 @@
  1 +<?xml version="1.0" encoding="UTF-8" ?>
  2 +<otrs_config init="Application" version="2.0">
  3 + <Setting Name="CustomerFrontend::Module###QueuesPanel" Required="0" Valid="1">
  4 + <Description>FrontendModuleRegistration for QueuesPanel module.</Description>
  5 + <Navigation>Frontend::Customer::ModuleRegistration</Navigation>
  6 + <Value>
  7 + <Item ValueType="FrontendRegistration">
  8 + <Hash>
  9 + <Item Key="Group">
  10 + <Array>
  11 + </Array>
  12 + </Item>
  13 + <Item Key="GroupRo">
  14 + <Array>
  15 + </Array>
  16 + </Item>
  17 + <Item Key="Description">Module for choosing main queues to open tickets</Item>
  18 + <Item Key="NavBarName">QueuesPanel</Item>
  19 + <!-- JQueryPlugin for colums -->
  20 + </Hash>
  21 + </Item>
  22 + </Value>
  23 + </Setting>
  24 + <Setting Name="Loader::Module::QueuesPanel###002-QueuesPanel" Required="0" Valid="1">
  25 + <Description Translatable="1">Loader module registration for the agent interface.</Description>
  26 + <Navigation>Frontend::Customer::ModuleRegistration::Loader</Navigation>
  27 + <Value>
  28 + <Hash>
  29 + <Item Key="CSS">
  30 + <Array>
  31 + <Item>QueuesPanel.css</Item>
  32 + <Item>hColumns/hcolumns.css</Item>
  33 + <Item>hColumns/hcolumns-intro.css</Item>
  34 + <Item>hColumns/reset.css</Item>
  35 + <Item>bootstrap/bootstrap-theme.min.css</Item>
  36 + <Item>bootstrap/bootstrap.min.css</Item>
  37 + </Array>
  38 + </Item>
  39 + <Item Key="JavaScript">
  40 + <Array>
  41 + <Item>thirdparty/hColumns/jquery.hcolumns.min.js</Item>
  42 + <Item>thirdparty/bootstrap/bootstrap.min.js</Item>
  43 + <Item>QueuesPanel.js</Item>
  44 + </Array>
  45 + </Item>
  46 + </Hash>
  47 + </Value>
  48 + </Setting>
  49 + <Setting Name="CustomerFrontend::Navigation###QueuesPanel###002-QueuesPanel" Required="0" Valid="1">
  50 + <Description Translatable="1">Main menu item registration.</Description>
  51 + <Navigation>Frontend::Customer::ModuleRegistration::MainMenu</Navigation>
  52 + <Value>
  53 + <Array>
  54 + <DefaultItem ValueType="FrontendNavigation">
  55 + <Hash>
  56 + </Hash>
  57 + </DefaultItem>
  58 + <Item>
  59 + <Hash>
  60 + <Item Key="Group">
  61 + <Array>
  62 + </Array>
  63 + </Item>
  64 + <Item Key="GroupRo">
  65 + <Array>
  66 + </Array>
  67 + </Item>
  68 + <Item Lang="pt_BR" Key="Description">Painel de filas</Item>
  69 + <Item Lang="pt_BR" Key="Name">Painel de filas</Item>
  70 + <Item Key="Description">Queues panel</Item>
  71 + <Item Key="Name">Queues panel</Item>
  72 + <Item Key="Link">Action=QueuesPanel</Item>
  73 + <Item Key="LinkOption"></Item>
  74 + <Item Key="NavBar">QueuesPanel</Item>
  75 + <Item Key="Type">Menu</Item>
  76 + <Item Key="Block"></Item>
  77 + <Item Key="AccessKey"></Item>
  78 + <Item Key="Prio">8400</Item>
  79 + </Hash>
  80 + </Item>
  81 + </Array>
  82 + </Value>
  83 + </Setting>
  84 +
  85 + <Setting Name="PublicFrontend::Module###QueuesPanelPublic" Required="0" Valid="1">
  86 + <Description>FrontendModuleRegistration for QueuesPanelPublic module.</Description>
  87 + <Navigation>Frontend::Public::ModuleRegistration</Navigation>
  88 + <Value>
  89 + <Item ValueType="FrontendRegistration">
  90 + <Hash>
  91 + <Item Key="Group">
  92 + <Array>
  93 + </Array>
  94 + </Item>
  95 + <Item Key="GroupRo">
  96 + <Array>
  97 + </Array>
  98 + </Item>
  99 + <Item Key="Description" Lang="en">Module for choosing main queues to open tickets</Item>
  100 + <Item Key="Description" Lang="pt_BR">Módulo para escolher as filas principais para abrir tickets</Item>
  101 + <Item Key="NavBarName">QueuesPanel</Item>
  102 + <!-- JQueryPlugin for colums -->
  103 + </Hash>
  104 + </Item>
  105 + </Value>
  106 + </Setting>
  107 + <Setting Name="Loader::Module::QueuesPanelPublic###002-QueuesPanel" Required="0" Valid="1">
  108 + <Description Translatable="1">Loader module registration for the agent interface.</Description>
  109 + <Navigation>Frontend::Public::ModuleRegistration</Navigation>
  110 + <Value>
  111 + <Hash>
  112 + <Item Key="CSS">
  113 + <Array>
  114 + <Item>QueuesPanel.css</Item>
  115 + <Item>hColumns/hcolumns.css</Item>
  116 + <Item>hColumns/hcolumns-intro.css</Item>
  117 + <Item>hColumns/reset.css</Item>
  118 + <Item>bootstrap/bootstrap-theme.min.css</Item>
  119 + <Item>bootstrap/bootstrap.min.css</Item>
  120 + </Array>
  121 + </Item>
  122 + <Item Key="JavaScript">
  123 + <Array>
  124 + <Item>thirdparty/hColumns/jquery.hcolumns.min.js</Item>
  125 + <Item>thirdparty/bootstrap/bootstrap.min.js</Item>
  126 + <Item>QueuesPanel.js</Item>
  127 + </Array>
  128 + </Item>
  129 + </Hash>
  130 + </Value>
  131 + </Setting>
  132 + <Setting Name="PublicFrontend::Navigation###QueuesPanelPublic###002-QueuesPanel" Required="0" Valid="1">
  133 + <Description Translatable="1">Main menu item registration.</Description>
  134 + <Navigation>Frontend::Public::ModuleRegistration</Navigation>
  135 + <Value>
  136 + <Array>
  137 + <DefaultItem ValueType="FrontendNavigation">
  138 + <Hash>
  139 + </Hash>
  140 + </DefaultItem>
  141 + <Item>
  142 + <Hash>
  143 + <Item Key="Group">
  144 + <Array>
  145 + </Array>
  146 + </Item>
  147 + <Item Key="GroupRo">
  148 + <Array>
  149 + </Array>
  150 + </Item>
  151 + <Item Lang="pt_BR" Key="Description">Painel de filas</Item>
  152 + <Item Lang="pt_BR" Key="Name">Painel de filas</Item>
  153 + <Item Lang="en" Key="Description">Queues panel</Item>
  154 + <Item Lang="en" Key="Name">Queues panel</Item>
  155 + <Item Key="Link">Action=QueuesPanelPublic</Item>
  156 + <Item Key="LinkOption"></Item>
  157 + <Item Key="NavBar">QueuesPanel</Item>
  158 + <Item Key="Type">Menu</Item>
  159 + <Item Key="Block"></Item>
  160 + <Item Key="AccessKey"></Item>
  161 + <Item Key="Prio">8400</Item>
  162 + </Hash>
  163 + </Item>
  164 + </Array>
  165 + </Value>
  166 + </Setting>
  167 +
  168 +
  169 + <Setting Name="Ticket::Frontend::Customer::QueuesPanel###MessageChooseQueuePublic"
  170 + Required="0" Valid="1">
  171 + <Description Lang="en">Message to let the user choose a queue in public mode (non-authenticated).</Description>
  172 + <Description Lang="pt_BR">Mensagem ao usuário para que escolha uma fila em modo público (não-autenticado).</Description>
  173 + <Navigation>Frontend::Customer::QueuesPanel</Navigation>
  174 + <Value>
  175 + <Item ValueType="String" ValueRegex="">Please choose the queue to send the ticket to</Item>
  176 + </Value>
  177 + </Setting>
  178 +
  179 + <Setting Name="Ticket::Frontend::Customer::QueuesPanel###MessageChooseQueue"
  180 + Required="0" Valid="1">
  181 + <Description Lang="en">Message to let the user choose a queue.</Description>
  182 + <Description Lang="pt_BR">Mensagem ao usuário para que escolha uma fila.</Description>
  183 + <Navigation>Frontend::Customer::QueuesPanel</Navigation>
  184 + <Value>
  185 + <Item ValueType="String" ValueRegex="">Please choose the queue to send the ticket to</Item>
  186 + </Value>
  187 + </Setting>
  188 +
  189 + <Setting Name="Ticket::Frontend::Customer::QueuesPanel###IgnoreQueuesIDs"
  190 + Required="0" Valid="1">
  191 + <Description Lang="en">Queues IDs to not show in panel (comma separated).</Description>
  192 + <Description Lang="pt_BR">IDs de filas que não devem ser exibidas no painel (separados por vírgula)</Description>
  193 + <Navigation>Frontend::Customer::QueuesPanel</Navigation>
  194 + <Value>
  195 + <Item ValueType="String" ValueRegex=""></Item>
  196 + </Value>
  197 + </Setting>
  198 +
  199 + <Setting Name="Ticket::Frontend::Customer::QueuesPanel###CustomHeaderFooterID"
  200 + Required="0" Valid="1">
  201 + <Description Lang="en">Customer footer/header suffix, if used.</Description>
  202 + <Description Lang="pt_BR">Sufixo para cabeçalhos personalizados, se usado.</Description>
  203 + <Navigation>Frontend::Customer::QueuesPanel</Navigation>
  204 + <Value>
  205 + <Item ValueType="String" ValueRegex=""></Item>
  206 + </Value>
  207 + </Setting>
  208 +
  209 + <Setting Name="Ticket::Frontend::Customer::QueuesPanel###ExtraQueues"
  210 + Required="0" Valid="1">
  211 + <Description Lang="en">Extra queues to show in panel in public mode (non-authenticated). Format: One per Line, Name|URL</Description>
  212 + <Description Lang="pt_BR">Filas adicionais (simuladas) para exibir no painel em modo público (não autenticado). Formato: Uma por linha, Nome|URL</Description>
  213 + <Navigation>Frontend::Customer::QueuesPanel</Navigation>
  214 + <Value>
  215 + <Item ValueType="Textarea"></Item>
  216 + </Value>
  217 + </Setting>
  218 +
  219 + <Setting Name="Ticket::Frontend::Customer::QueuesPanel###ExtraQueuesPublic"
  220 + Required="0" Valid="1">
  221 + <Description Lang="en">Extra queues to show in panel in public mode (non-authenticated). Format: One per Line, Name|URL</Description>
  222 + <Description Lang="pt_BR">Filas adicionais (simuladas) para exibir no painel em modo público (não autenticado). Formato: Uma por linha, Nome|URL</Description>
  223 + <Navigation>Frontend::Customer::QueuesPanel</Navigation>
  224 + <Value>
  225 + <Item ValueType="Textarea"></Item>
  226 + </Value>
  227 + </Setting>
  228 +
  229 + <Setting Name="Ticket::Frontend::Customer::QueuesPanel###NewTicketURL"
  230 + Required="0" Valid="1">
  231 + <Description Lang="en">Base URL to call to create ticket, queue ID added to the end</Description>
  232 + <Description Lang="pr_BR">URL base para chamar quando for criar um ticket, o Id da fila é adicionado ao final</Description>
  233 + <Navigation>Frontend::Customer::QueuesPanel</Navigation>
  234 + <Value>
  235 + <Item ValueType="String">/otrs/customer.pl?Action=NewTicketWizard;QueueID=</Item>
  236 + </Value>
  237 + </Setting>
  238 +
  239 + <Setting Name="Ticket::Frontend::Customer::QueuesPanel###NewTicketURLPublic"
  240 + Required="0" Valid="1">
  241 + <Description Lang="en">Base URL to call to create ticket, queue ID added to the end</Description>
  242 + <Description Lang="pr_BR">URL base para chamar quando for criar um ticket em modo público (não autenticado), o Id da fila é adicionado ao final</Description>
  243 + <Navigation>Frontend::Customer::QueuesPanel</Navigation>
  244 + <Value>
  245 + <Item ValueType="String">/otrs/public.pl?Action=NewTicketWizardPublic;QueueID=</Item>
  246 + </Value>
  247 + </Setting>
  248 +
  249 +
  250 +</otrs_config>
src/Kernel/Language/pt_BR_QueuesPanel.pm 0 → 100755
@@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
  1 +# Kernel/Modules/pt_BR_QueuesPanel.pm - translations for QueuesPanel
  2 +#
  3 +# Copyright (C) 2014-2018 SeTIC - UFSC - http://setic.ufsc.br/
  4 +# Rodrigo Goncalves (rodrigo.g@ufsc.br)
  5 +#
  6 +# Version 01/08/2015 - Adjustments for OTRS 4
  7 +# Version 2018-01-22 - Adjustments for OTRS 6
  8 +#
  9 +# --
  10 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  11 +# the enclosed file COPYING for license information (AGPL). If you
  12 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  13 +# --
  14 +package Kernel::Language::pt_BR_QueuesPanel;
  15 +
  16 +use strict;
  17 +use warnings;
  18 +use utf8;
  19 +
  20 +sub Data {
  21 + my $Self = shift;
  22 +
  23 + $Self->{Translation}->{'The following maintenances are in progress'} = 'As seguintes manutenções estão ocorrendo';
  24 + $Self->{Translation}->{'Started at: '} = 'Iniciada em:';
  25 + $Self->{Translation}->{'Queues panel'} = 'Novo chamado';
  26 + $Self->{Translation}->{'Choose the service to ask for support'} = 'Escolha o servi&ccedil;o para o qual deseja suporte';
  27 + $Self->{Translation}->{'Message to let the user choose a queue.'} = 'Mensagem para o usuário escolher a fila';
  28 + $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)';
  29 + $Self->{Translation}->{'Customer footer/header suffix, if used.'} = 'Sufixo personalizado de cabeçalho/rodapé, se usado';
  30 + $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';
  31 + $Self->{Translation}->{'Extra queues to show in panel. Format: One per Line, Name|URL'} = 'Filas extra, com URLs especiais. Formato: Nome|URL';
  32 + $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';
  33 +
  34 +
  35 +
  36 +
  37 +
  38 +
  39 + return 1;
  40 +}
  41 +1;
0 \ No newline at end of file 42 \ No newline at end of file
src/Kernel/Language/pt_BR_QueuesPanelPublic.pm 0 → 100755
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
  1 +# Kernel/Modules/pt_BR_QueuesPanelPublic.pm - translations for QueuesPanelPublic
  2 +#
  3 +# Copyright (C) 2014-2018 SeTIC - UFSC - http://setic.ufsc.br/
  4 +# Rodrigo Goncalves (rodrigo.g@ufsc.br)
  5 +#
  6 +# Version 01/08/2015 - Adjustments for OTRS 4
  7 +# Version 2018-01-22 - Adjustments for OTRS 6
  8 +#
  9 +# --
  10 +# --
  11 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  12 +# the enclosed file COPYING for license information (AGPL). If you
  13 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  14 +# --
  15 +package Kernel::Language::pt_BR_QueuesPanelPublic;
  16 +
  17 +use strict;
  18 +use warnings;
  19 +use utf8;
  20 +
  21 +sub Data {
  22 + my $Self = shift;
  23 +
  24 + $Self->{Translation}->{'The following maintenances are in progress'} = 'As seguintes manutenções estão ocorrendo';
  25 + $Self->{Translation}->{'Started at: '} = 'Iniciada em:';
  26 + $Self->{Translation}->{'Queues panel'} = 'Novo chamado';
  27 + $Self->{Translation}->{'Choose the service to ask for support'} = 'Escolha o servi&ccedil;o para o qual deseja suporte';
  28 + return 1;
  29 +}
  30 +1;
0 \ No newline at end of file 31 \ No newline at end of file
src/Kernel/Modules/QueuesPanel.pm 0 → 100755
@@ -0,0 +1,99 @@ @@ -0,0 +1,99 @@
  1 +# --
  2 +# Kernel/Modules/QueuesPanel.pm - frontend module for choosing top queues
  3 +#
  4 +# Copyright (C) 2014-2018 SeTIC - UFSC - http://setic.ufsc.br/
  5 +# Rodrigo Goncalves (rodrigo.g@ufsc.br)
  6 +#
  7 +# Version 01/08/2015 - Support for OTRS 4.0.3
  8 +# Version 2018-01-22 - Support for OTRS 6
  9 +#
  10 +# --
  11 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  12 +# the enclosed file COPYING for license information (AGPL). If you
  13 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  14 +# --
  15 +package Kernel::Modules::QueuesPanel;
  16 +
  17 +use strict;
  18 +use warnings;
  19 +
  20 +use Kernel::System::VariableCheck qw(:all);
  21 +
  22 +our @ObjectDependencies = (
  23 + "Kernel::System::Web::Request", "Kernel::System::DB",
  24 + "Kernel::Output::HTML::Layout", "KerneL::System::Log",
  25 + "Kernel::Config", "Kernel::System::Queue",
  26 + "Kernel::System::QueuesPanel"
  27 +);
  28 +
  29 +sub new {
  30 + my ( $Type, %Param ) = @_;
  31 +
  32 + # allocate new hash for object
  33 + my $Self = {%Param};
  34 + bless( $Self, $Type );
  35 +
  36 + return $Self;
  37 +}
  38 +
  39 +sub Run {
  40 + my ( $Self, %Param ) = @_;
  41 + my %Data = ();
  42 +
  43 + my $ParamObject = $Kernel::OM->Get("Kernel::System::Web::Request");
  44 + my $ConfigObject = $Kernel::OM->Get("Kernel::Config");
  45 + my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout");
  46 + my $LanguageObject = $Kernel::OM->Get("Kernel::Language");
  47 +
  48 + $Self->{Config} =
  49 + $ConfigObject->Get("Ticket::Frontend::Customer::QueuesPanel");
  50 + my $msgChooseService = $Self->{Config}->{"MessageChooseQueue"};
  51 + my $ignoreQueuesIDs = $Self->{Config}->{"IgnoreQueuesIDs"};
  52 + my $customHeaderFooterID = "QP" . $Self->{Config}->{"CustomHeaderFooterID"};
  53 + my $extraQueues = $Self->{Config}->{"ExtraQueues"};
  54 + my $URL = $Self->{Config}->{"NewTicketURL"};
  55 +
  56 + if ( $ParamObject->GetParam( Param => "Subaction" ) eq "QueueData" ) {
  57 + my $queuesPanelBuilder =
  58 + $Kernel::OM->Get("Kernel::System::QueuesPanel");
  59 + my $queueData = $queuesPanelBuilder->BuildQueuesJS(
  60 + IgnoreQueuesIDs => $ignoreQueuesIDs,
  61 + ExtraQueues => $extraQueues,
  62 + URL => $URL
  63 + );
  64 + return $LayoutObject->Attachment(
  65 + ContentType => 'application/json; charset='
  66 + . $LayoutObject->{Charset},
  67 + Content => $queueData,
  68 + Type => 'inline',
  69 + NoCache => 1,
  70 + );
  71 + }
  72 + else {
  73 + $LayoutObject->AddJSData(
  74 + Key => 'QueuesPanel.Mode',
  75 + Value => "Authenticated",
  76 + );
  77 +
  78 + my $queuesPanelBuilder =
  79 + $Kernel::OM->Get("Kernel::System::QueuesPanel");
  80 +
  81 + $Data{MsgChooseQueue} = $msgChooseService;
  82 +
  83 + # build output
  84 + my $Output = $LayoutObject->CustomerHeader(
  85 + Type => $customHeaderFooterID,
  86 + Title => $LanguageObject->Translate("Queues panel")
  87 + );
  88 +
  89 + $Output .= $LayoutObject->Output(
  90 + Data => \%Data,
  91 + TemplateFile => 'QueuesPanel',
  92 + );
  93 + $Output .=
  94 + $LayoutObject->CustomerFooter( Type => $customHeaderFooterID );
  95 + return $Output;
  96 + }
  97 +}
  98 +
  99 +1;
src/Kernel/Modules/QueuesPanelPublic.pm 0 → 100755
@@ -0,0 +1,115 @@ @@ -0,0 +1,115 @@
  1 +# --
  2 +# Kernel/Modules/QueuesPanelPublic.pm - frontend module for choosing top queues
  3 +#
  4 +# Copyright (C) 2014-2018 SeTIC - UFSC - http://setic.ufsc.br/
  5 +# Rodrigo Goncalves (rodrigo.g@ufsc.br)
  6 +#
  7 +# Version 01/12/2015 - Support for OTRS 4.0.3
  8 +# Version 2018-01-22 - Support for OTRS 6
  9 +#
  10 +# --
  11 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  12 +# the enclosed file COPYING for license information (AGPL). If you
  13 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  14 +# --
  15 +package Kernel::Modules::QueuesPanelPublic;
  16 +
  17 +use strict;
  18 +use warnings;
  19 +
  20 +use Kernel::System::VariableCheck qw(:all);
  21 +
  22 +our @ObjectDependencies = (
  23 + "Kernel::System::Web::Request", "Kernel::System::DB",
  24 + "Kernel::Output::HTML::Layout", "KerneL::System::Log",
  25 + "Kernel::Config", "Kernel::System::Queue",
  26 + "Kernel::System::QueuesPanel"
  27 +);
  28 +
  29 +sub new {
  30 + my ( $Type, %Param ) = @_;
  31 +
  32 + # allocate new hash for object
  33 + my $Self = {%Param};
  34 + bless( $Self, $Type );
  35 +
  36 + return $Self;
  37 +}
  38 +
  39 +sub Run {
  40 + my ( $Self, %Param ) = @_;
  41 + my %Data = ();
  42 +
  43 + my $ParamObject = $Kernel::OM->Get("Kernel::System::Web::Request");
  44 + my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout");
  45 + my $ConfigObject = $Kernel::OM->Get("Kernel::Config");
  46 + my $LanguageObject = $Kernel::OM->Get("Kernel::Language");
  47 +
  48 + ## If a ticket was received (CAS), meand the user is authenticated
  49 + if ( $ParamObject->GetParam( Param => "ticket" ) ) {
  50 + my $retorno = $LayoutObject->Redirect( OP => "Action=QueuesPanel", );
  51 + $retorno =~ s/public/customer/g;
  52 + return $retorno;
  53 + }
  54 +
  55 + ## If trying to authenticate, forwards to CAS gateway
  56 + if ( $ParamObject->GetParam( Param => "autenticar" ) ) {
  57 + my $url =
  58 + $ConfigObject->Get('Customer::AuthModule::CAS::CASUrl')
  59 + . "/login?gateway=true&service="
  60 + . "https://"
  61 + . $ENV{SERVER_NAME}
  62 + . $ENV{SCRIPT_NAME}
  63 + . "?Action=QueuesPanelPublic";
  64 + return $LayoutObject->Redirect( ExtURL => $url, );
  65 + }
  66 +
  67 + $Self->{Config} = $ConfigObject->Get("Ticket::Frontend::Customer::QueuesPanel");
  68 + my $msgChooseService = $Self->{Config}->{"MessageChooseQueuePublic"};
  69 + my $ignoreQueuesIDs = $Self->{Config}->{"IgnoreQueuesIDs"};
  70 + my $customHeaderFooterID = "QP" . $Self->{Config}->{"CustomHeaderFooterID"};
  71 + my $extraQueues = $Self->{Config}->{"ExtraQueuesPublic"};
  72 + my $URL = $Self->{Config}->{"NewTicketURLPublic"};
  73 +
  74 + if ( $ParamObject->GetParam(Param => "Subaction") eq "QueueData" ) {
  75 + my $queuesPanelBuilder = $Kernel::OM->Get("Kernel::System::QueuesPanel");
  76 + my $queueData = $queuesPanelBuilder->BuildQueuesJS(
  77 + IgnoreQueuesIDs => $ignoreQueuesIDs,
  78 + ExtraQueues => $extraQueues,
  79 + URL => $URL
  80 + );
  81 + return $LayoutObject->Attachment(
  82 + ContentType => 'application/json; charset='
  83 + . $LayoutObject->{Charset},
  84 + Content => $queueData,
  85 + Type => 'inline',
  86 + NoCache => 1,
  87 + );
  88 + }
  89 + else {
  90 + $LayoutObject->AddJSData(
  91 + Key => 'QueuesPanel.Mode',
  92 + Value => "Public",
  93 + );
  94 + $Data{MsgChooseQueue} = $msgChooseService;
  95 +
  96 + # build output
  97 + my $Output = $LayoutObject->CustomerHeader(
  98 + Type => $customHeaderFooterID,
  99 + Title => $LanguageObject->Translate("New ticket")
  100 + );
  101 +
  102 + $Output .= $LayoutObject->Output(
  103 + Data => \%Data,
  104 + TemplateFile => 'QueuesPanel',
  105 + );
  106 +
  107 + $Output .=
  108 + $LayoutObject->CustomerFooter( Type => $customHeaderFooterID );
  109 +
  110 + return $Output;
  111 + }
  112 +
  113 +}
  114 +
  115 +1;
src/Kernel/Output/HTML/Templates/Standard/CustomerFooterQP.tt 0 → 100755
@@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
  1 +# --
  2 +# CustomerFooterNTW.tt - Footer for QueuesPanel - SeTIC - UFSC - http://setic.ufsc.br/
  3 +#
  4 +# Copyright (C) 2014-2018 SeTIC - UFSC - http://setic.ufsc.br/
  5 +# Rodrigo Gonçalves - rodrigo.g@ufsc.br
  6 +#
  7 +#
  8 +# Version 2018-01-16 - Support for customizations
  9 +# --
  10 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  11 +# the enclosed file COPYING for license information (AGPL). If you
  12 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  13 +# --
  14 +</div>
  15 +
  16 +[% InsertTemplate("CustomerFooterJS.tt") %]
  17 +
  18 +</body>
  19 +</html>
src/Kernel/Output/HTML/Templates/Standard/CustomerHTMLHeadQP.tt 0 → 100755
@@ -0,0 +1,164 @@ @@ -0,0 +1,164 @@
  1 +# --
  2 +# CustomerHTMLHeadUFSC.tt - provides FSC global HTML header
  3 +#
  4 +# Copyright (C) 2015, SeTIC - UFSC - http://setic.ufsc.br/
  5 +# Rodrigo Goncalves (rodrigo.g@ufsc.br)
  6 +#
  7 +# Version 2018-01-22 - Support for OTRS 6
  8 +#
  9 +# --
  10 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  11 +# the enclosed file COPYING for license information (AGPL). If you
  12 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  13 +# --
  14 +<head>
  15 + <meta http-equiv="Content-type" content="text/html;charset=utf-8" />
  16 +[% RenderBlockStart("MetaHttpEquivRefresh") %]
  17 +[% INCLUDE "HTMLHeadRefresh.tt" %]
  18 +[% RenderBlockEnd("MetaHttpEquivRefresh") %]
  19 +[% RenderBlockStart("MetaLink") %]
  20 + <link rel="[% Data.Rel | html %]" type="[% Data.Type | html %]" title="[% Data.Title | html %]" href="[% Data.Href %]" />
  21 +[% RenderBlockEnd("MetaLink") %]
  22 + <link rel="shortcut icon" href="[% Config("Frontend::ImagePath") %]icons/product.ico" type="image/ico" />
  23 +
  24 +[% RenderBlockStart("CommonCSS") %]
  25 + <link rel="stylesheet" type="text/css" href="[% Config("Frontend::WebPath") %]skins/Customer/[% Data.Skin | uri %]/[% Data.CSSDirectory | html %]/[% Data.Filename | html %]" />
  26 +[% RenderBlockEnd("CommonCSS") %]
  27 +
  28 +[% RenderBlockStart("CommonCSS_IE8") %]
  29 +<!--[if IE 7]>
  30 + <link rel="stylesheet" type="text/css" href="[% Config("Frontend::WebPath") %]skins/Customer/[% Data.Skin | uri %]/[% Data.CSSDirectory | html %]/[% Data.Filename | html %]" />
  31 + <![endif]-->
  32 +[% RenderBlockEnd("CommonCSS_IE8") %]
  33 +
  34 +[% RenderBlockStart("ModuleCSS") %]
  35 + <link rel="stylesheet" type="text/css" href="[% Config("Frontend::WebPath") %]skins/Customer/[% Data.Skin | uri %]/[% Data.CSSDirectory | html %]/[% Data.Filename | html %]" />
  36 +[% RenderBlockEnd("ModuleCSS") %]
  37 +
  38 +[% RenderBlockStart("ModuleCSS_IE8") %]
  39 +<!--[if IE 7]>
  40 + <link rel="stylesheet" type="text/css" href="[% Config("Frontend::WebPath") %]skins/Customer/[% Data.Skin | uri %]/[% Data.CSSDirectory | html %]/[% Data.Filename | html %]" />
  41 + <![endif]-->
  42 +[% RenderBlockEnd("ModuleCSS_IE8") %]
  43 +
  44 + <link rel="stylesheet" type="text/css" href="[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/ui-theme/jquery-ui.css" />
  45 + <link rel="stylesheet" type="text/css" href="[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/jstree-theme/default/style.css" />
  46 +
  47 +[% RenderBlockStart("HeaderLogoCSS") %]
  48 + <style type="text/css">
  49 + #Header #Logo {
  50 + background-image: [% Data.URL | html %];
  51 + top: [% Data.StyleTop | html %];
  52 + right: [% Data.StyleRight | html %];
  53 + width: [% Data.StyleWidth | html %];
  54 + height: [% Data.StyleHeight | html %];
  55 + }
  56 + </style>
  57 +[% RenderBlockEnd("HeaderLogoCSS") %]
  58 +
  59 + <style type="text/css">
  60 + @font-face {
  61 + font-family: 'FontAwesome';
  62 + src: url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.eot?v=4.1.0');
  63 + src: url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'),
  64 + url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.woff?v=4.1.0') format('woff'),
  65 + url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.ttf?v=4.1.0') format('truetype'),
  66 + url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.svg#fontawesomeregular?v=4.1.0') format('svg');
  67 + font-weight: normal;
  68 + font-style: normal;
  69 + }
  70 +
  71 + /* Fix poor font rendering on chrome based browsers on windows */
  72 + @media all and (-webkit-min-device-pixel-ratio:0) {
  73 + @font-face {
  74 + font-family: 'FontAwesome';
  75 + src: url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.svg#fontawesomeregular') format('svg'),
  76 + url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'),
  77 + url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.woff?v=4.1.0') format('woff'),
  78 + url('[% Config("Frontend::WebPath") %]skins/Customer/default/css/thirdparty/fontawesome/fontawesome-webfont.ttf?v=4.1.0') format('truetype');
  79 + font-weight: normal;
  80 + font-style: normal;
  81 + }
  82 + }
  83 + </style>
  84 +
  85 +<!--[if IE 8]>
  86 + <script type="text/javascript">
  87 + /* Fix initial font rendering on IE8 for FontAwesome */
  88 + (function() {
  89 + var head = document.getElementsByTagName('head')[0],
  90 + style = document.createElement('style');
  91 + style.type = 'text/css';
  92 + style.styleSheet.cssText = ':before,:after{content:none !important;}';
  93 + head.appendChild(style);
  94 + setTimeout(function(){
  95 + head.removeChild(style);
  96 + }, 0);
  97 + }());
  98 + </script>
  99 + <![endif]-->
  100 +
  101 + <style type="text/css">
  102 + #header {
  103 + height: 90px;
  104 + background-image: url("/otrs-web/skins/Customer/default/images/queues-panel/cabecalhoUFSC.jpg");
  105 + background-position: bottom left;
  106 + padding-left: 30px;
  107 + padding-top: 0px;
  108 + font-family: Verdana, Arial, sans-serif;
  109 + margin-bottom: 20px;
  110 + }
  111 +
  112 + .tabstyles {
  113 + border-collapse: separate;
  114 + display: inline;
  115 + font-family: Verdana, Arial, sans-serif;
  116 + font-size: 11px;
  117 + height: auto;
  118 + margin-bottom: 0px;
  119 + margin-left: 0px;
  120 + margin-right: 0px;
  121 + margin-top: 0px;
  122 + padding-bottom: 0px;
  123 + padding-left: 0px;
  124 + padding-right: 0px;
  125 + padding-top: 0px;
  126 + width: auto;
  127 +vertical-align: bottom;
  128 + }
  129 +
  130 + .atalhoMenuLogo {
  131 + text-align: right;
  132 + vertical-align: bottom;
  133 + color: #0000ee;
  134 + }
  135 +
  136 + .titleText {
  137 + FONT-SIZE: 16px;
  138 + FONT-WEIGHT: bold;
  139 + FONT-FAMILY: Arial, Helvetica, sans-serif;
  140 + text-align: left;
  141 + margin-left: 10px;
  142 +}
  143 +
  144 + body {
  145 + background: white;
  146 + FONT-FAMILY: Arial, Helvetica, sans-serif;
  147 + text-align: left;
  148 + font-size: 12px;
  149 +}
  150 + }
  151 +
  152 +
  153 +
  154 + </style>
  155 +
  156 +
  157 + <title>[% Data.TitleArea | html %] [% Config("ProductName") %]</title>
  158 +
  159 +
  160 +
  161 +
  162 +[% INCLUDE "HTMLHeadBlockEvents.tt" %]
  163 +
  164 +</head>
src/Kernel/Output/HTML/Templates/Standard/CustomerHeaderQP.tt 0 → 100755
@@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
  1 +# --
  2 +# CustomerHeaderQPUFSC.tt - provides header for Queues Panel
  3 +#
  4 +# Copyright (C) 2014-2018 SeTIC - UFSC - http://setic.ufsc.br/
  5 +# Rodrigo Goncalves (rodrigo.g@ufsc.br)
  6 +#
  7 +# Version 2018-01-22 - Support for OTRS 6
  8 +#
  9 +# --
  10 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  11 +# the enclosed file COPYING for license information (AGPL). If you
  12 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  13 +# --
  14 +[%- INCLUDE "HTTPHeaders.tt" -%]
  15 +
  16 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  17 +<html lang="br">
  18 +[% InsertTemplate("Copyright.tt") %]
  19 +[% InsertTemplate("CustomerHTMLHeadQP.tt") %]
  20 +
  21 +<body lang="br" class="NoJavaScript" [% Data.BodyClass | html %]>
  22 +
  23 +<!-- Closed on footer - centers data in screen (bootstrap) -->
  24 +<div class="container">
  25 +<!-- end header -->
0 \ No newline at end of file 26 \ No newline at end of file
src/Kernel/Output/HTML/Templates/Standard/QueuesPanel.tt 0 → 100755
@@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
  1 +# --
  2 +# Kernel/Output/HTML/Standard/QueuesPanel.tt - overview
  3 +#
  4 +# Copyright (C) SeTIC - UFSC - http://setic.ufsc.br/
  5 +# Rodrigo Gonçalves - rodrigo.g@ufsc.br
  6 +#
  7 +# Version 01/12/2015 - Support for OTRS 4.0.3
  8 +# Version 2018-01-22 - Suuport for OTRS 6
  9 +#
  10 +# --
  11 +# $Id: writing-otrs-application.xml,v 1.1 2010/08/13 08:59:28 mg Exp $
  12 +# --
  13 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  14 +# the enclosed file COPYING for license information (AGPL). If you
  15 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  16 +# --
  17 +
  18 +<div class="panel" style="height: 10vh;">
  19 + <div class="panel-heading ">
  20 + <h1>[% Translate("Tickets") | html %]</h1>
  21 + </div>
  22 +</div>
  23 +
  24 +
  25 +<div id="Queues" class="Queues">
  26 + <div class="ChooseQueue">[% Data.MsgChooseQueue %]</div>
  27 +
  28 + <div id="columns" style="height:70vh;"></div>
  29 +
  30 +</div>
0 \ No newline at end of file 31 \ No newline at end of file
src/Kernel/System/QueuesPanel.pm 0 → 100755
@@ -0,0 +1,206 @@ @@ -0,0 +1,206 @@
  1 +# --
  2 +# Kernel/System/QueuesPanel.pm - logic for queues panel module
  3 +#
  4 +# Copyright (C) SeTIC - UFSC - http://setic.ufsc.br/
  5 +# Version 29/10/2015 - First version
  6 +#
  7 +# --
  8 +# This software comes with ABSOLUTELY NO WARRANTY. For details, see
  9 +# the enclosed file COPYING for license information (AGPL). If you
  10 +# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
  11 +# --
  12 +package Kernel::System::QueuesPanel;
  13 +
  14 +use strict;
  15 +use warnings;
  16 +
  17 +use Kernel::System::VariableCheck qw(:all);
  18 +use Data::Dumper;
  19 +use JSON;
  20 +
  21 +our @ObjectDependencies = (
  22 +"Kernel::System::DB",
  23 +"KerneL::System::Log",
  24 +"Kernel::System::Queue");
  25 +
  26 +sub new {
  27 + my ( $Type, %Param ) = @_;
  28 +
  29 + # allocate new hash for object
  30 + my $Self = {%Param};
  31 + bless( $Self, $Type );
  32 +
  33 + return $Self;
  34 +}
  35 +
  36 +
  37 +=head
  38 +
  39 +Builds the JavaScript for the Queues Panel component (jQuery hColumns)
  40 +
  41 +Params: IgnoreQueuesID - comma-separated list of queues to ignore
  42 + ExtraQueues - line-break separated list of extra queues to include. Each line has a name for the queue and a link, separated by "||" - example:
  43 + SeTIC|http://setic.ufsc.br
  44 +
  45 +=cut
  46 +sub BuildQueuesJS {
  47 + my ( $Self, %Param ) = @_;
  48 +
  49 + # Get queues
  50 + my %Queues = ();
  51 + my %ExtraQueuesLinks = ();
  52 +
  53 + my $DBObject = $Kernel::OM->Get("Kernel::System::DB");
  54 +
  55 + if ($Param{IgnoreQueuesIDs}) {
  56 + $DBObject->Prepare( SQL => "SELECT id, name FROM queue WHERE valid_id = 1 AND id NOT IN (" . $Param{IgnoreQueuesIDs} . ") ORDER BY name ASC", );
  57 + } else {
  58 + $DBObject->Prepare( SQL => "SELECT id, name FROM queue WHERE valid_id = 1 ORDER BY name ASC", );
  59 + }
  60 +
  61 + while ( my @Row = $DBObject->FetchrowArray() ) {
  62 + $Queues{ $Row[0] } = $Row[1];
  63 + }
  64 +
  65 + if ($Param{ExtraQueues}) {
  66 + my @extraQueues = split('\n', $Param{ExtraQueues});
  67 + my $id = -1;
  68 + foreach my $extraQueue (@extraQueues) {
  69 + my @data = split('\|', $extraQueue);
  70 + $Queues{$id} = $data[0];
  71 + $ExtraQueuesLinks{$id} = $data[1];
  72 + $id = $id - 1;
  73 + }
  74 + }
  75 +
  76 + my %result = ();
  77 +
  78 + for my $queue ( keys %Queues ) {
  79 + $result{$queue} = $Self->BuildQueueJS( Queues => \%Queues, Queue => $Queues{$queue}, QueueID => $queue, ExtraQueuesLinks => \%ExtraQueuesLinks, URL =>
  80 + $Param{URL} );
  81 + }
  82 +
  83 + $result{-1} = $Self->BuildTopQueuesJS( Queues => \%Queues, ExtraQueuesLinks => \%ExtraQueuesLinks, URL =>
  84 + $Param{URL} );
  85 +
  86 + my $json = encode_json \%result;
  87 +
  88 + $Self->Debug("Queue data: " . $json);
  89 +
  90 + return $json;
  91 +}
  92 +
  93 +=head
  94 +
  95 +Builds the top level queues JavaScript
  96 +
  97 +Params: Queues - queues list
  98 + ExtraQueuesLinks - links for custom (id < 0) queues
  99 +
  100 +=cut
  101 +sub BuildTopQueuesJS {
  102 + my ( $Self, %Param ) = @_;
  103 + my %Queues = %{ $Param{"Queues"} };
  104 + my %ExtraQueuesLinks = %{ $Param{"ExtraQueuesLinks"} };
  105 +
  106 + my @topQueues = grep { index( $Queues{$_}, '::' ) == -1 } keys %Queues;
  107 +
  108 + my @result = ();
  109 +
  110 +
  111 + for my $queue (sort {$Queues{$a} cmp $Queues{$b}} @topQueues) {
  112 + my %data = ();
  113 +
  114 + if ( grep { index( $Queues{$_}, $Queues{$queue} . "::" ) >= 0 } keys %Queues ) {
  115 + $data{id} = $queue;
  116 + $data{label} = $Self->LastQueue( $Queues{$queue} );
  117 + $data{type} = "folder";
  118 + } else {
  119 + $data{id} = $queue;
  120 + $data{label} = $Self->LastQueue( $Queues{$queue} );
  121 + $data{type} = "link";
  122 + $data{url} = ($queue < 0 ? $ExtraQueuesLinks{$queue} : $Param{"URL"} . $queue);
  123 + }
  124 + push @result, \%data;
  125 + }
  126 +
  127 + return \@result;
  128 +}
  129 +
  130 +=head
  131 +
  132 +Builds sub-queues JavaScript
  133 +
  134 +Params: Queues - queues list
  135 + ExtraQueuesLinks - links for custom (id < 0) queues
  136 + BaseQueue / BaseQueueID - which upper queue to generate subqueues
  137 +
  138 +=cut
  139 +sub BuildQueueJS {
  140 + my ( $Self, %Param ) = @_;
  141 + my %Queues = %{ $Param{"Queues"} };
  142 + my $BaseQueue = $Param{"Queue"};
  143 + my $BaseQueueID = $Param{"QueueID"};
  144 + my %ExtraQueuesLinks = %{ $Param{"ExtraQueuesLinks"} };
  145 +
  146 + # Get subqueues
  147 + my @subqueues = grep { index( $Queues{$_}, $BaseQueue . "::" ) >= 0 } keys %Queues;
  148 + my $level = () = $BaseQueue =~ /::/g;
  149 + $level = $level + 1;
  150 +
  151 + # Remove subsubqueues
  152 + @subqueues = grep { ( () = $Queues{$_} =~ /::/g ) == $level } @subqueues;
  153 +
  154 + # When there are no subqueues, there is no need to create a JS
  155 + if ( !@subqueues ) {
  156 + return "";
  157 + }
  158 +
  159 + my @result = ();
  160 +
  161 + for my $queue (sort {$Queues{$a} cmp $Queues{$b}} @subqueues) {
  162 + my %data = ();
  163 +
  164 +
  165 + if ( grep { index( $Queues{$_}, $Queues{$queue} . "::" ) >= 0 } keys %Queues ) {
  166 + $data{id} = $queue;
  167 + $data{label} = $Self->LastQueue( $Queues{$queue} );
  168 + $data{type} = "folder";
  169 + }
  170 + else {
  171 + $data{id} = $queue;
  172 + $data{label} = $Self->LastQueue( $Queues{$queue} );
  173 + $data{type} = "link";
  174 + $data{url} = ($queue < 0 ? $ExtraQueuesLinks{$queue} : $Param{"URL"} . $queue);
  175 + }
  176 +
  177 + push @result, \%data;
  178 + }
  179 +
  180 + return \@result;
  181 +
  182 +}
  183 +
  184 +=head
  185 +
  186 +Returns last part of the queue name (strips parent queues)
  187 +
  188 +Params: QueueName
  189 +
  190 +=cut
  191 +sub LastQueue {
  192 + my $Self = shift;
  193 + my $queue = shift;
  194 + my @parts = split( "::", $queue );
  195 + return $parts[-1];
  196 +}
  197 +
  198 +sub Debug {
  199 + my $Self = shift;
  200 + my $msg = shift;
  201 + $Kernel::OM->Get("Kernel::System::Log")->Log( Priority => 'debug', Message => $msg );
  202 +}
  203 +
  204 +
  205 +1;
  206 +
src/QueuesPanel.sopm 0 → 100755
@@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
  1 +<?xml version="1.0" encoding="utf-8" ?>
  2 +<otrs_package version="1.0">
  3 + <Name>QueuesPanel</Name>
  4 + <Version>1.3.0</Version>
  5 + <Framework>6.0.x</Framework>
  6 + <Vendor>SeTIC</Vendor>
  7 + <ChangeLog version="1.1.0">Support for custom queues, layout fixes, support for custom layouts for header and footer</ChangeLog>
  8 + <ChangeLog version="1.2.0">Support for OTRS 5.0.x</ChangeLog>
  9 + <ChangeLog version="1.3.0">Support for OTRS 6.0.x</ChangeLog>
  10 + <URL>http://www.setic.ufsc.br</URL>
  11 + <License>AGPL</License>
  12 + <Description Lang="en">Queue choosing panel</Description>
  13 + <Description Lang="pt_BR">Painel para escolha de fila na abertura de chamados</Description>
  14 + <IntroInstall Type="post" Title="Thank you">Module installed successfully!</IntroInstall>
  15 + <IntroInstall Type="post" Lang="pt_BR" Title="Obrigado!">Módulo instalado com sucesso!</IntroInstall>
  16 + <Description>Queues Panel</Description>
  17 + <BuildDate>?</BuildDate>
  18 + <BuildHost>?</BuildHost>
  19 + <PackageRequired>BootstrapSuport</PackageRequired>
  20 + <Filelist>
  21 + <File Permission="644" Location="Kernel/Config/Files/XML/QueuesPanel.xml"></File>
  22 + <File Permission="644" Location="Kernel/Language/pt_BR_QueuesPanel.pm"></File>
  23 + <File Permission="644" Location="Kernel/Language/pt_BR_QueuesPanelPublic.pm"></File>
  24 +
  25 + <File Permission="644" Location="Kernel/Modules/QueuesPanel.pm"></File>
  26 + <File Permission="644" Location="Kernel/Modules/QueuesPanelPublic.pm"></File>
  27 +
  28 + <File Permission="644" Location="Kernel/System/QueuesPanel.pm"></File>
  29 +
  30 + <File Permission="644" Location="Kernel/Output/HTML/Templates/Standard/QueuesPanel.tt"></File>
  31 + <File Permission="644" Location="Kernel/Output/HTML/Templates/Standard/CustomerFooterQP.tt"></File>
  32 + <File Permission="644" Location="Kernel/Output/HTML/Templates/Standard/CustomerHeaderQP.tt"></File>
  33 + <File Permission="644" Location="Kernel/Output/HTML/Templates/Standard/CustomerHTMLHeadQP.tt"></File>
  34 +
  35 +
  36 + <File Permission="644" Location="var/httpd/htdocs/js/thirdparty/hColumns/jquery.hcolumns.min.js"></File>
  37 + <File Permission="644" Location="var/httpd/htdocs/js/QueuesPanel.js"></File>
  38 +
  39 +
  40 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/hColumns/hcolumns-intro.css"></File>
  41 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/hColumns/hcolumns.css"></File>
  42 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/css/hColumns/reset.css"></File>
  43 +
  44 + <File Permission="644" Location="var/httpd/htdocs/skins/Customer/default/images/hColumns/glyphicons-halflings.png"></File>
  45 +
  46 + </Filelist>
  47 +</otrs_package>
src/var/httpd/htdocs/js/QueuesPanel.js 0 → 100644
@@ -0,0 +1,52 @@ @@ -0,0 +1,52 @@
  1 +/**
  2 + * QueuesPanel module - SeTIC - UFSC - http://setic.ufsc.br/
  3 + * Rodrigo Gonçalves - rodrigo.g@ufsc.br
  4 + *
  5 + * Version 2018-01-22 - Support for OTRS 6
  6 + *
  7 + *
  8 + */
  9 +var Core = Core || {};
  10 +Core.Customer = Core.Customer || {};
  11 +
  12 +
  13 +Core.Customer.QueuesPanel = (function (TargetNS) {
  14 +
  15 + TargetNS.Init = function() {
  16 + TargetNS.loadQueueData();
  17 + }
  18 +
  19 + TargetNS.loadQueueData = function() {
  20 + var url;
  21 +
  22 + if (Core.Config.Get("QueuesPanel.Mode") === "Public") {
  23 + url = "/otrs/public.pl?Action=QueuesPanelPublic;Subaction=QueueData";
  24 + } else {
  25 + url = "/otrs/customer.pl?Action=QueuesPanel;Subaction=QueueData";
  26 + }
  27 +
  28 + $.getJSON(url, function(data) {
  29 + Core.Config.Set("QueuesPanel.QueueData", data);
  30 + TargetNS.InitQueues();
  31 + }).fail(function(jqXHR, textStatus, errorThrown) {
  32 + alert("Erro ao recuperar: " + url + " => " + textStatus);
  33 + });
  34 + }
  35 +
  36 + TargetNS.InitQueues = function() {
  37 + $("#columns").hColumns({
  38 + nodeSource: function(node_id, callback) {
  39 + return callback(null, Core.Customer.QueuesPanel.buildQueue(node_id));
  40 + }
  41 + });
  42 + }
  43 +
  44 + TargetNS.buildQueue = function(node_id) {
  45 + var data = Core.Config.Get("QueuesPanel.QueueData")[node_id === null ? -1 : node_id];
  46 + return data;
  47 + }
  48 +
  49 + Core.Init.RegisterNamespace(TargetNS, 'APP_MODULE');
  50 + return TargetNS;
  51 +
  52 +}(Core.Customer.QueuesPanel || {}));
0 \ No newline at end of file 53 \ No newline at end of file
src/var/httpd/htdocs/js/thirdparty/hColumns/jquery.hcolumns.min.js 0 → 100755
@@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
  1 +// hColumns by bu <bu@hax4.in>, BSD License
  2 +
  3 +(function(b){var k={nodeSource:function(){return window.alert("dummy source, you need to create a node source")},noContentString:"There is no node here",searchPlaceholderString:"Search...",searchable:!1,customNodeTypeIndicator:{},customNodeTypeHandler:{}},l={folder:function(a,d,c){a.nodeSource(c.id,function(d,c){return d?b.error(d):a.columnView._addColumnList(c,a.columnView)})},link:function(b,d,c){return window.open(c.url)}},m={folder:"icon-chevron-right",link:"icon-globe"},h={init:function(a){var d=
  4 +b.extend(k,a),c=b.extend(l,d.customNodeTypeHandler),f=b.extend(m,d.customNodeTypeIndicator);return this.each(function(){var a=b(this),g=a.data("columnView");h.settings=d;d.columnView=h;d.handlers=c;d.indicators=f;d.container_node=this;g||(a.data("hColumn",d),a.addClass("column-view-container"),b("<div></div>").addClass("column-view-composition").appendTo(a),a.on("click",".column ul li:not('.search')",d.columnView._entryClick),d.nodeSource(null,function(a,c){return a?b.error(a):d.columnView._addColumnList(c)}))})},
  5 +_entryClick:function(){var a=b(this).parents(".column-view-container").data("hColumn"),d=b(this).parents(".column-view-container"),c=b(this).parents(".column"),f=b(this).parents(".column").index(),e=b(this).data("node-type"),g=b(this).data("node-data");b(d).find(".column-view-composition .column:gt("+f+")").remove();c.find(".active").removeClass("active");b(this).addClass("active");return a.handlers[e](a,this,g)},_addColumnList:function(a,d){var c=d?d:this,f=b("<ul></ul>");if(0===a.length)return f=
  6 +b("<p></p>").text(d.settings.noContentString),c._addColumn(f,c);c.settings.searchable&&c._addColumnSearch(f);for(var e=0;e<a.length;e++){var g=b(document.createElement("li")).data("node-id",a[e].id).data("node-type",a[e].type).data("node-data",a[e]).attr("title",a[e].label),h=b(document.createElement("i")).addClass(c.settings.indicators[a[e].type]);g[0].appendChild(document.createTextNode(a[e].label));g[0].appendChild(h[0]);f[0].appendChild(g[0])}return c._addColumn(f,c)},_addColumnSearch:function(a){b('<li class="search"><input type="text" placeholder=" '+
  7 +this.settings.searchPlaceholderString+'"></li>').on("keyup","input",function(a){var c=b(this).val();2<=c.length?b(this).closest("li").siblings().each(function(){""!==c&&-1===b(this).data("node-data").label.toLowerCase().indexOf(c.toLowerCase())?b(this).hide():b(this).show()}):b(this).closest("li").siblings().show()}).appendTo(a)},_addColumn:function(a,d){var c=b("<div></div>").addClass("column");c.append(a);b(d.settings.container_node).find(".column-view-composition").append(c);b(d.settings.container_node).scrollLeft(b(".column-view-composition").width())}};
  8 +b.fn.hColumns=function(a){if(h[a])return h[a].apply(this,Array.prototype.slice.call(arguments,1));if("object"!==typeof a&&a)b.error("Method "+a+" does not exist on jQuery.hColumns");else return h.init.apply(this,arguments)}})(jQuery);
src/var/httpd/htdocs/skins/Customer/default/css/hColumns/hcolumns-intro.css 0 → 100755
@@ -0,0 +1,82 @@ @@ -0,0 +1,82 @@
  1 +body {
  2 + background: #f5f5f5;
  3 + font-family: "Arial", sans-serif;
  4 +}
  5 +
  6 +.container {
  7 + padding: 2em;
  8 +}
  9 +
  10 +h1 {
  11 + color: #000;
  12 + font-size: 2em;
  13 +
  14 + margin: 0.75em 0;
  15 +}
  16 +
  17 +h1 small {
  18 + color: #ccc;
  19 + font-size: 0.5em;
  20 +}
  21 +
  22 +img {
  23 + margin: 20px;
  24 +}
  25 +
  26 +h2 {
  27 + margin: 1em 0;
  28 +
  29 + font-size: 1.25em;
  30 + color: #999;
  31 +}
  32 +
  33 +ol {
  34 + margin-left: 2em;
  35 +
  36 + list-style: upper-roman;
  37 +}
  38 +
  39 +ol li {
  40 + margin: 20px;
  41 +}
  42 +
  43 +.code-block {
  44 + border: 1px solid #ccc;
  45 + background: #fff;
  46 +
  47 + margin: 1em;
  48 + padding: 1em;
  49 +}
  50 +
  51 +.code-block strong {
  52 + display: block;
  53 +
  54 + margin: 1em;
  55 + font-weight: 700;
  56 +}
  57 +
  58 +.code-block strong.minor {
  59 + font-weight: 400;
  60 + color: #666;
  61 +}
  62 +
  63 +.code-block pre {
  64 + padding: 10px;
  65 +
  66 + font-family: monospace;
  67 +}
  68 +
  69 +.code-block p {
  70 + padding: 0 30px;
  71 +
  72 + margin: 10px 0;
  73 +
  74 + font-size: 13px;
  75 +}
  76 +
  77 +.code-block ol li {
  78 + font-size: 13px;
  79 + margin: 5px;
  80 + line-height: 20px;
  81 +}
  82 +
src/var/httpd/htdocs/skins/Customer/default/css/hColumns/hcolumns.css 0 → 100755
@@ -0,0 +1,163 @@ @@ -0,0 +1,163 @@
  1 +/*.ChooseQueue {
  2 + border-bottom-style: solid;
  3 + border-width: 1px;
  4 + padding: 5px;
  5 + margin-top: 5px;
  6 + margin-left: 10px;
  7 +}*/
  8 +
  9 +.ChooseQueue {
  10 + background-color: rgb(198, 222, 255);
  11 +background-image: none;
  12 +background-position: 0px 0px;
  13 +background-repeat: repeat-x;
  14 +border-bottom-color: rgb(255, 255, 255);
  15 +border-bottom-style: solid;
  16 +border-bottom-width: 0px;
  17 +border-collapse: separate;
  18 +border-left-color: rgb(255, 255, 255);
  19 +border-left-style: solid;
  20 +border-left-width: 1px;
  21 +border-right-color: rgb(255, 255, 255);
  22 +border-right-style: solid;
  23 +border-right-width: 1px;
  24 +border-top-color: rgb(255, 255, 255);
  25 +border-top-style: solid;
  26 +border-top-width: 1px;
  27 +color: rgb(0, 0, 0);
  28 +cursor: default;
  29 +display: table-cell;
  30 +font-family: Arial, Verdana, sans-serif;
  31 +font-size: 14px;
  32 +font-weight: bold;
  33 +height: 12px;
  34 +margin-bottom: 0px;
  35 +margin-left: 0px;
  36 +margin-right: 0px;
  37 +margin-top: 0px;
  38 +padding-bottom: 5px;
  39 +padding-left: 15px;
  40 +padding-right: 15px;
  41 +padding-top: 5px;
  42 +text-align: center;
  43 +vertical-align: middle;
  44 +}
  45 +
  46 +.Queues {
  47 + width: 80%;
  48 + margin: 0 auto;
  49 + padding-top: 10px;
  50 +}
  51 +
  52 +/* column view container */
  53 +.column-view-container {
  54 + width: 100%;
  55 + margin: 0px;
  56 + padding: 0px;
  57 + border: 1px solid #ccc;
  58 + background: #FFF;
  59 + display: block;
  60 + overflow-x: auto;
  61 + overflow-y: scroll;
  62 +}
  63 +
  64 +/* the composition div for colums */
  65 +.column-view-composition {
  66 + display: table;
  67 + white-space: nowrap;
  68 +}
  69 +
  70 +/**/
  71 +.column {
  72 + display: table-cell;
  73 + border-right: 1px solid #999;
  74 +}
  75 +
  76 +.column:last-child {
  77 +/* border-right: 0;*/
  78 +}
  79 +
  80 +.column:only-child {
  81 + border-right: 1px solid #999;
  82 +}
  83 +
  84 +/* for error messages */
  85 +.column > p {
  86 + margin: 10px;
  87 + color: #666;
  88 +}
  89 +
  90 +/* for column listing */
  91 +.column ul {
  92 + margin: 0;
  93 + padding: 0;
  94 + width: 250px;
  95 + overflow-y: auto;
  96 + list-style: none;
  97 +}
  98 +
  99 +.column ul li {
  100 + position: relative;
  101 + margin: 0;
  102 + padding: 10px 20px 10px 10px;
  103 + overflow: hidden;
  104 + -o-text-overflow: ellipsis; /* pour Opera 9 */
  105 + text-overflow: ellipsis; /* pour le reste du monde */
  106 +}
  107 +
  108 +.column ul li:hover {
  109 + cursor: pointer;
  110 +}
  111 +
  112 +.column ul li i {
  113 + position: absolute;
  114 + top: 9px;
  115 + right: 5px;
  116 +}
  117 +
  118 +.column ul li:hover, .column ul li.active {
  119 + background: #999999;
  120 + color: #FFFFFF;
  121 +}
  122 +
  123 +.column ul li:hover a, .column ul li.active a {
  124 + color: #FFFFFF;
  125 +}
  126 +
  127 +.column ul li.search {
  128 + margin: 0;
  129 + padding: 5px;
  130 +}
  131 +
  132 +.column ul li.search input {
  133 + width: 100%;
  134 + margin: 0;
  135 +}
  136 +
  137 +
  138 +/* icon type, could be replace with FontAwesome */
  139 +[class^="icon-"], [class*=" icon-"] {
  140 + display: inline-block;
  141 + width: 14px;
  142 + height: 14px;
  143 + margin-top: 1px;
  144 + *margin-right: .3em;
  145 + line-height: 14px;
  146 + vertical-align: text-top;
  147 + background-image: url("/otrs-web/skins/Customer/default/images/hColumns/glyphicons-halflings.png");
  148 + background-position: 14px 14px;
  149 + background-repeat: no-repeat;
  150 +}
  151 +
  152 +.icon-chevron-right {
  153 + background-position: -456px -72px;
  154 +}
  155 +
  156 +.icon-globe {
  157 + #background-position: -336px -144px;
  158 + background-position: -800px -800px;
  159 +}
  160 +
  161 +.icon-file {
  162 + background-position: -23px -24px;
  163 +}
src/var/httpd/htdocs/skins/Customer/default/css/hColumns/reset.css 0 → 100755
@@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
  1 +/* http://meyerweb.com/eric/tools/css/reset/
  2 + v2.0 | 20110126
  3 + License: none (public domain)
  4 +*/
  5 +
  6 +html, body, div, span, applet, object, iframe,
  7 +h1, h2, h3, h4, h5, h6, p, blockquote, pre,
  8 +a, abbr, acronym, address, big, cite, code,
  9 +del, dfn, em, img, ins, kbd, q, s, samp,
  10 +small, strike, strong, sub, sup, tt, var,
  11 +b, u, i, center,
  12 +dl, dt, dd, ol, ul, li,
  13 +fieldset, form, label, legend,
  14 +table, caption, tbody, tfoot, thead, tr, th, td,
  15 +article, aside, canvas, details, embed,
  16 +figure, figcaption, footer, header, hgroup,
  17 +menu, nav, output, ruby, section, summary,
  18 +time, mark, audio, video {
  19 + margin: 0;
  20 + padding: 0;
  21 + border: 0;
  22 + font-size: 100%;
  23 + font: inherit;
  24 + vertical-align: baseline;
  25 +}
  26 +/* HTML5 display-role reset for older browsers */
  27 +article, aside, details, figcaption, figure,
  28 +footer, header, hgroup, menu, nav, section {
  29 + display: block;
  30 +}
  31 +body {
  32 + line-height: 1;
  33 +}
  34 +ol, ul {
  35 + list-style: none;
  36 +}
  37 +blockquote, q {
  38 + quotes: none;
  39 +}
  40 +blockquote:before, blockquote:after,
  41 +q:before, q:after {
  42 + content: '';
  43 + content: none;
  44 +}
  45 +table {
  46 + border-collapse: collapse;
  47 + border-spacing: 0;
  48 +}
0 \ No newline at end of file 49 \ No newline at end of file
src/var/httpd/htdocs/skins/Customer/default/images/hColumns/glyphicons-halflings.png 0 → 100755

12.5 KB

var/httpd/htdocs/js/thirdparty/hColumns/jquery.hcolumns.min.js
@@ -1,8 +0,0 @@ @@ -1,8 +0,0 @@
1 -// hColumns by bu <bu@hax4.in>, BSD License  
2 -  
3 -(function(b){var k={nodeSource:function(){return window.alert("dummy source, you need to create a node source")},noContentString:"There is no node here",searchPlaceholderString:"Search...",searchable:!1,customNodeTypeIndicator:{},customNodeTypeHandler:{}},l={folder:function(a,d,c){a.nodeSource(c.id,function(d,c){return d?b.error(d):a.columnView._addColumnList(c,a.columnView)})},link:function(b,d,c){return window.open(c.url)}},m={folder:"icon-chevron-right",link:"icon-globe"},h={init:function(a){var d=  
4 -b.extend(k,a),c=b.extend(l,d.customNodeTypeHandler),f=b.extend(m,d.customNodeTypeIndicator);return this.each(function(){var a=b(this),g=a.data("columnView");h.settings=d;d.columnView=h;d.handlers=c;d.indicators=f;d.container_node=this;g||(a.data("hColumn",d),a.addClass("column-view-container"),b("<div></div>").addClass("column-view-composition").appendTo(a),a.on("click",".column ul li:not('.search')",d.columnView._entryClick),d.nodeSource(null,function(a,c){return a?b.error(a):d.columnView._addColumnList(c)}))})},  
5 -_entryClick:function(){var a=b(this).parents(".column-view-container").data("hColumn"),d=b(this).parents(".column-view-container"),c=b(this).parents(".column"),f=b(this).parents(".column").index(),e=b(this).data("node-type"),g=b(this).data("node-data");b(d).find(".column-view-composition .column:gt("+f+")").remove();c.find(".active").removeClass("active");b(this).addClass("active");return a.handlers[e](a,this,g)},_addColumnList:function(a,d){var c=d?d:this,f=b("<ul></ul>");if(0===a.length)return f=  
6 -b("<p></p>").text(d.settings.noContentString),c._addColumn(f,c);c.settings.searchable&&c._addColumnSearch(f);for(var e=0;e<a.length;e++){var g=b(document.createElement("li")).data("node-id",a[e].id).data("node-type",a[e].type).data("node-data",a[e]).attr("title",a[e].label),h=b(document.createElement("i")).addClass(c.settings.indicators[a[e].type]);g[0].appendChild(document.createTextNode(a[e].label));g[0].appendChild(h[0]);f[0].appendChild(g[0])}return c._addColumn(f,c)},_addColumnSearch:function(a){b('<li class="search"><input type="text" placeholder=" '+  
7 -this.settings.searchPlaceholderString+'"></li>').on("keyup","input",function(a){var c=b(this).val();2<=c.length?b(this).closest("li").siblings().each(function(){""!==c&&-1===b(this).data("node-data").label.toLowerCase().indexOf(c.toLowerCase())?b(this).hide():b(this).show()}):b(this).closest("li").siblings().show()}).appendTo(a)},_addColumn:function(a,d){var c=b("<div></div>").addClass("column");c.append(a);b(d.settings.container_node).find(".column-view-composition").append(c);b(d.settings.container_node).scrollLeft(b(".column-view-composition").width())}};  
8 -b.fn.hColumns=function(a){if(h[a])return h[a].apply(this,Array.prototype.slice.call(arguments,1));if("object"!==typeof a&&a)b.error("Method "+a+" does not exist on jQuery.hColumns");else return h.init.apply(this,arguments)}})(jQuery);  
var/httpd/htdocs/skins/Customer/default/css/hColumns/hcolumns-intro.css
@@ -1,82 +0,0 @@ @@ -1,82 +0,0 @@
1 -body {  
2 - background: #f5f5f5;  
3 - font-family: "Arial", sans-serif;  
4 -}  
5 -  
6 -.container {  
7 - padding: 2em;  
8 -}  
9 -  
10 -h1 {  
11 - color: #000;  
12 - font-size: 2em;  
13 -  
14 - margin: 0.75em 0;  
15 -}  
16 -  
17 -h1 small {  
18 - color: #ccc;  
19 - font-size: 0.5em;  
20 -}  
21 -  
22 -img {  
23 - margin: 20px;  
24 -}  
25 -  
26 -h2 {  
27 - margin: 1em 0;  
28 -  
29 - font-size: 1.25em;  
30 - color: #999;  
31 -}  
32 -  
33 -ol {  
34 - margin-left: 2em;  
35 -  
36 - list-style: upper-roman;  
37 -}  
38 -  
39 -ol li {  
40 - margin: 20px;  
41 -}  
42 -  
43 -.code-block {  
44 - border: 1px solid #ccc;  
45 - background: #fff;  
46 -  
47 - margin: 1em;  
48 - padding: 1em;  
49 -}  
50 -  
51 -.code-block strong {  
52 - display: block;  
53 -  
54 - margin: 1em;  
55 - font-weight: 700;  
56 -}  
57 -  
58 -.code-block strong.minor {  
59 - font-weight: 400;  
60 - color: #666;  
61 -}  
62 -  
63 -.code-block pre {  
64 - padding: 10px;  
65 -  
66 - font-family: monospace;  
67 -}  
68 -  
69 -.code-block p {  
70 - padding: 0 30px;  
71 -  
72 - margin: 10px 0;  
73 -  
74 - font-size: 13px;  
75 -}  
76 -  
77 -.code-block ol li {  
78 - font-size: 13px;  
79 - margin: 5px;  
80 - line-height: 20px;  
81 -}  
82 -  
var/httpd/htdocs/skins/Customer/default/css/hColumns/hcolumns.css
@@ -1,163 +0,0 @@ @@ -1,163 +0,0 @@
1 -/*.ChooseQueue {  
2 - border-bottom-style: solid;  
3 - border-width: 1px;  
4 - padding: 5px;  
5 - margin-top: 5px;  
6 - margin-left: 10px;  
7 -}*/  
8 -  
9 -.ChooseQueue {  
10 - background-color: rgb(198, 222, 255);  
11 -background-image: none;  
12 -background-position: 0px 0px;  
13 -background-repeat: repeat-x;  
14 -border-bottom-color: rgb(255, 255, 255);  
15 -border-bottom-style: solid;  
16 -border-bottom-width: 0px;  
17 -border-collapse: separate;  
18 -border-left-color: rgb(255, 255, 255);  
19 -border-left-style: solid;  
20 -border-left-width: 1px;  
21 -border-right-color: rgb(255, 255, 255);  
22 -border-right-style: solid;  
23 -border-right-width: 1px;  
24 -border-top-color: rgb(255, 255, 255);  
25 -border-top-style: solid;  
26 -border-top-width: 1px;  
27 -color: rgb(0, 0, 0);  
28 -cursor: default;  
29 -display: table-cell;  
30 -font-family: Arial, Verdana, sans-serif;  
31 -font-size: 14px;  
32 -font-weight: bold;  
33 -height: 12px;  
34 -margin-bottom: 0px;  
35 -margin-left: 0px;  
36 -margin-right: 0px;  
37 -margin-top: 0px;  
38 -padding-bottom: 5px;  
39 -padding-left: 15px;  
40 -padding-right: 15px;  
41 -padding-top: 5px;  
42 -text-align: center;  
43 -vertical-align: middle;  
44 -}  
45 -  
46 -.Queues {  
47 - width: 80%;  
48 - margin: 0 auto;  
49 - padding-top: 10px;  
50 -}  
51 -  
52 -/* column view container */  
53 -.column-view-container {  
54 - width: 100%;  
55 - margin: 0px;  
56 - padding: 0px;  
57 - border: 1px solid #ccc;  
58 - background: #FFF;  
59 - display: block;  
60 - overflow-x: auto;  
61 - overflow-y: hidden;  
62 -}  
63 -  
64 -/* the composition div for colums */  
65 -.column-view-composition {  
66 - display: table;  
67 - white-space: nowrap;  
68 -}  
69 -  
70 -/**/  
71 -.column {  
72 - display: table-cell;  
73 - border-right: 1px solid #999;  
74 -}  
75 -  
76 -.column:last-child {  
77 -/* border-right: 0;*/  
78 -}  
79 -  
80 -.column:only-child {  
81 - border-right: 1px solid #999;  
82 -}  
83 -  
84 -/* for error messages */  
85 -.column > p {  
86 - margin: 10px;  
87 - color: #666;  
88 -}  
89 -  
90 -/* for column listing */  
91 -.column ul {  
92 - margin: 0;  
93 - padding: 0;  
94 - width: 250px;  
95 - overflow-y: auto;  
96 - list-style: none;  
97 -}  
98 -  
99 -.column ul li {  
100 - position: relative;  
101 - margin: 0;  
102 - padding: 10px 20px 10px 10px;  
103 - overflow: hidden;  
104 - -o-text-overflow: ellipsis; /* pour Opera 9 */  
105 - text-overflow: ellipsis; /* pour le reste du monde */  
106 -}  
107 -  
108 -.column ul li:hover {  
109 - cursor: pointer;  
110 -}  
111 -  
112 -.column ul li i {  
113 - position: absolute;  
114 - top: 9px;  
115 - right: 5px;  
116 -}  
117 -  
118 -.column ul li:hover, .column ul li.active {  
119 - background: #999999;  
120 - color: #FFFFFF;  
121 -}  
122 -  
123 -.column ul li:hover a, .column ul li.active a {  
124 - color: #FFFFFF;  
125 -}  
126 -  
127 -.column ul li.search {  
128 - margin: 0;  
129 - padding: 5px;  
130 -}  
131 -  
132 -.column ul li.search input {  
133 - width: 100%;  
134 - margin: 0;  
135 -}  
136 -  
137 -  
138 -/* icon type, could be replace with FontAwesome */  
139 -[class^="icon-"], [class*=" icon-"] {  
140 - display: inline-block;  
141 - width: 14px;  
142 - height: 14px;  
143 - margin-top: 1px;  
144 - *margin-right: .3em;  
145 - line-height: 14px;  
146 - vertical-align: text-top;  
147 - background-image: url("/otrs-web/skins/Customer/default/images/hColumns/glyphicons-halflings.png");  
148 - background-position: 14px 14px;  
149 - background-repeat: no-repeat;  
150 -}  
151 -  
152 -.icon-chevron-right {  
153 - background-position: -456px -72px;  
154 -}  
155 -  
156 -.icon-globe {  
157 - #background-position: -336px -144px;  
158 - background-position: -800px -800px;  
159 -}  
160 -  
161 -.icon-file {  
162 - background-position: -23px -24px;  
163 -}  
var/httpd/htdocs/skins/Customer/default/css/hColumns/reset.css
@@ -1,48 +0,0 @@ @@ -1,48 +0,0 @@
1 -/* http://meyerweb.com/eric/tools/css/reset/  
2 - v2.0 | 20110126  
3 - License: none (public domain)  
4 -*/  
5 -  
6 -html, body, div, span, applet, object, iframe,  
7 -h1, h2, h3, h4, h5, h6, p, blockquote, pre,  
8 -a, abbr, acronym, address, big, cite, code,  
9 -del, dfn, em, img, ins, kbd, q, s, samp,  
10 -small, strike, strong, sub, sup, tt, var,  
11 -b, u, i, center,  
12 -dl, dt, dd, ol, ul, li,  
13 -fieldset, form, label, legend,  
14 -table, caption, tbody, tfoot, thead, tr, th, td,  
15 -article, aside, canvas, details, embed,  
16 -figure, figcaption, footer, header, hgroup,  
17 -menu, nav, output, ruby, section, summary,  
18 -time, mark, audio, video {  
19 - margin: 0;  
20 - padding: 0;  
21 - border: 0;  
22 - font-size: 100%;  
23 - font: inherit;  
24 - vertical-align: baseline;  
25 -}  
26 -/* HTML5 display-role reset for older browsers */  
27 -article, aside, details, figcaption, figure,  
28 -footer, header, hgroup, menu, nav, section {  
29 - display: block;  
30 -}  
31 -body {  
32 - line-height: 1;  
33 -}  
34 -ol, ul {  
35 - list-style: none;  
36 -}  
37 -blockquote, q {  
38 - quotes: none;  
39 -}  
40 -blockquote:before, blockquote:after,  
41 -q:before, q:after {  
42 - content: '';  
43 - content: none;  
44 -}  
45 -table {  
46 - border-collapse: collapse;  
47 - border-spacing: 0;  
48 -}  
49 \ No newline at end of file 0 \ No newline at end of file
var/httpd/htdocs/skins/Customer/default/images/hColumns/glyphicons-halflings.png

12.5 KB