Skip to content

Commit

Permalink
Sort charts numerically when possible
Browse files Browse the repository at this point in the history
83f0973 fixed sorting for numeric CF labels. This extends that to check all
labels for numeric values and sorts them accordingly. This fixes sorting of
time values like Hour, Day or WeekOfYear.
  • Loading branch information
Christian Loos authored and sartak committed Jun 29, 2015
1 parent 692227c commit 1b636e5
Showing 1 changed file with 10 additions and 13 deletions.
23 changes: 10 additions & 13 deletions lib/RT/Report/Tickets.pm
Original file line number Diff line number Diff line change
Expand Up @@ -673,27 +673,24 @@ sub SortEntries {
for ( my $i = 0; $i < @groups; $i++ ) {
my $group_by = $groups[$i];
my $idx = $i+1;
my $method;

# If this is a CF, traverse the values being used for labels.
# If they all look like numbers or undef, flag for a numeric sort

my $looks_like_number;
if ( $group_by->{'KEY'} eq 'CF' ){
$looks_like_number = 1;
my $order = $group_by->{'META'}{Sort} || 'label';
my $method = $order =~ /label$/ ? 'LabelValue' : 'RawValue';

unless ($order =~ /^numeric/) {
# Traverse the values being used for labels.
# If they all look like numbers or undef, flag for a numeric sort.
my $looks_like_number = 1;
foreach my $item (@data){
my $cf_label = $item->[0]->RawValue($group_by->{'NAME'});
my $label = $item->[0]->$method($group_by->{'NAME'});

$looks_like_number = 0
unless (not defined $cf_label)
or Scalar::Util::looks_like_number( $cf_label );
unless (not defined $label)
or Scalar::Util::looks_like_number( $label );
}
$order = "numeric $order" if $looks_like_number;
}

my $order = $looks_like_number ? 'numeric label' : 'label';
$order = $group_by->{'META'}{Sort} if exists $group_by->{'META'}{Sort};

if ( $order eq 'label' ) {
push @SORT_OPS, sub { $_[0][$idx] cmp $_[1][$idx] };
$method = 'LabelValue';
Expand Down

0 comments on commit 1b636e5

Please sign in to comment.