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 @@
  1 +dist/*
... ...
CreateOpm.sh
1 1 #!/bin/bash
2 2 LOCAL="$PWD"
3 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 5 cd $LOCAL
... ...
CreateOpmUFSC.sh
... ... @@ -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   -<?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 0 \ No newline at end of file
Kernel/Language/pt_BR_QueuesPanel.pm
... ... @@ -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 0 \ No newline at end of file
Kernel/Language/pt_BR_QueuesPanelPublic.pm
... ... @@ -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 0 \ No newline at end of file
Kernel/Modules/QueuesPanel.pm
... ... @@ -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   -# --
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   -# --
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   -# --
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   -# --
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   -# --
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 0 \ No newline at end of file
Kernel/System/QueuesPanel.pm
... ... @@ -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   -<?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 0 \ No newline at end of file
QueuesPanel.sopm
... ... @@ -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 @@
  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 43 \ No newline at end of file
... ...
src/Kernel/Config/Files/XML/QueuesPanel.xml 0 → 100644
... ... @@ -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 @@
  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 42 \ No newline at end of file
... ...
src/Kernel/Language/pt_BR_QueuesPanelPublic.pm 0 → 100755
... ... @@ -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 31 \ No newline at end of file
... ...
src/Kernel/Modules/QueuesPanel.pm 0 → 100755
... ... @@ -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 @@
  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 @@
  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 @@
  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 @@
  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 26 \ No newline at end of file
... ...
src/Kernel/Output/HTML/Templates/Standard/QueuesPanel.tt 0 → 100755
... ... @@ -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 31 \ No newline at end of file
... ...
src/Kernel/System/QueuesPanel.pm 0 → 100755
... ... @@ -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 @@
  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 @@
  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 53 \ No newline at end of file
... ...
src/var/httpd/htdocs/js/thirdparty/hColumns/jquery.hcolumns.min.js 0 → 100755
... ... @@ -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 @@
  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 @@
  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 @@
  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 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   -// 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   -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   -/*.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   -/* 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 0 \ No newline at end of file
var/httpd/htdocs/skins/Customer/default/images/hColumns/glyphicons-halflings.png

12.5 KB