Commit 116ecd72e8dfc5a17b54054cbcb13da47644ba67
1 parent
24cfb9e1
Exists in
master
Ajustes para OTRS 6
Showing
38 changed files
with
1423 additions
and
1234 deletions
Show diff stats
| ... | ... | @@ -0,0 +1 @@ |
| 1 | +dist/* | ... | ... |
CreateOpm.sh
CreateOpmUFSC.sh
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ç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ç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> |
| ... | ... | @@ -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 | ... | ... |
| ... | ... | @@ -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> | ... | ... |
| ... | ... | @@ -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ç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 | ... | ... |
| ... | ... | @@ -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ço para o qual deseja suporte'; | |
| 28 | + return 1; | |
| 29 | +} | |
| 30 | +1; | |
| 0 | 31 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -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; | ... | ... |
| ... | ... | @@ -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 | ... | ... |
| ... | ... | @@ -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 | + | ... | ... |
| ... | ... | @@ -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> | ... | ... |
| ... | ... | @@ -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