This commit is contained in:
2024-10-14 00:08:40 +02:00
parent dbfba56f66
commit 1462d52e13
4572 changed files with 2658864 additions and 0 deletions

View File

@@ -0,0 +1,169 @@
# --
# Copyright (C) 2001-2019 OTRS AG, https://otrs.com/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (GPL). If you
# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt.
# --
package Kernel::Output::HTML::TicketOverviewMenu::Sort;
use strict;
use warnings;
use Kernel::System::VariableCheck qw(:all);
our @ObjectDependencies = (
'Kernel::Config',
'Kernel::System::Log',
'Kernel::Output::HTML::Layout',
'Kernel::Language',
);
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {};
bless( $Self, $Type );
# get needed params
for my $Needed (qw(Action UserID)) {
$Self->{$Needed} = $Param{$Needed} || die "Got no $Needed!";
}
return $Self;
}
sub Run {
my ( $Self, %Param ) = @_;
my $SortConfiguration = $Kernel::OM->Get('Kernel::Config')->Get('TicketOverviewMenuSort')->{SortAttributes}
|| {
Age => 1,
Title => 1,
};
if ( !IsHashRefWithData($SortConfiguration) ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "Wrong configuration 'TicketOverviewMenuSort###SortAttributes' for ticket"
. " overview sort options.",
);
return;
}
# get layout object
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
my @SortData;
my $SelectedSortByOption;
for my $CurrentSortByOption ( sort keys %{$SortConfiguration} ) {
# add separator
if (@SortData) {
push @SortData, {
Key => '-',
Value => '-------------------------',
Disabled => 1,
};
}
my $TranslatedValue =
$LayoutObject->{LanguageObject}->Translate('Order by') . ' "' .
$LayoutObject->{LanguageObject}->Translate($CurrentSortByOption) . '"';
for my $CurrentOrderBy (qw(Down Up)) {
my $Selected = 0;
if (
$CurrentSortByOption eq $Param{SortBy}
&& $CurrentOrderBy eq $Param{OrderBy}
)
{
$Selected = 1;
$SelectedSortByOption = 1;
}
my $OrderByTranslation = $CurrentOrderBy eq 'Down' ? 'ascending' : 'descending';
$OrderByTranslation = $LayoutObject->{LanguageObject}->Translate($OrderByTranslation);
push @SortData, {
Key => "$CurrentSortByOption|$CurrentOrderBy",
Value => "$TranslatedValue ($OrderByTranslation)",
Selected => $Selected,
};
}
}
return if !@SortData;
my %ReturnData;
$ReturnData{HTML} = $LayoutObject->BuildSelection(
Data => \@SortData,
Name => 'SortBy',
Title => $LayoutObject->{LanguageObject}->Translate('Order by'),
);
return if !$ReturnData{HTML};
# build redirect param hash for Core.App.InternalRedirect
my %RedirectParams;
$RedirectParams{Action} = "\'$Self->{Action}\'";
for my $PossibleParam (qw(Filter)) {
if ( $Param{$PossibleParam} ) {
$RedirectParams{$PossibleParam} = "\'$Param{ $PossibleParam }\'";
}
}
if ( $Param{LinkFilter} ) {
my @SplittedLinkFilters = split( /[;&]/, $Param{LinkFilter} );
for my $CurrentLinkFilter ( sort @SplittedLinkFilters ) {
my @KeyValue = split( /=/, $CurrentLinkFilter );
if ( defined $KeyValue[1] ) {
$RedirectParams{ $KeyValue[0] } = "\'$KeyValue[1]\'";
}
}
}
$RedirectParams{SortBy} = 'Selection[0]';
$RedirectParams{OrderBy} = 'Selection[1]';
my $RedirectParamsString = '';
my $ParamLength = scalar keys %RedirectParams;
my $ParamCounter = 0;
for my $ParamKey ( sort keys %RedirectParams ) {
$ParamCounter++;
$RedirectParamsString .= "$ParamKey: $RedirectParams{$ParamKey}";
# prevent comma after last element for correct functionality in IE
if ( $ParamCounter < $ParamLength ) {
$RedirectParamsString .= ",\n";
}
else {
$RedirectParamsString .= "\n";
}
}
$LayoutObject->AddJSOnDocumentComplete( Code => <<"JS" );
\$("#SortBy").change(function(){
var Selection = \$(this).val().split('|');
if ( Selection.length === 2 ) {
Core.App.InternalRedirect({
${RedirectParamsString}
});
}
});
JS
$ReturnData{HTML} = '<li class="AlwaysPresent SortBy">'
. $ReturnData{HTML}
. '</li>';
$ReturnData{Block} = 'DocumentActionRowHTML';
return \%ReturnData;
}
1;