diff --git a/lib/MetaCPAN/Web/Controller/Author.pm b/lib/MetaCPAN/Web/Controller/Author.pm index d6f950e222..9fbf81202c 100644 --- a/lib/MetaCPAN/Web/Controller/Author.pm +++ b/lib/MetaCPAN/Web/Controller/Author.pm @@ -73,15 +73,18 @@ sub index : Chained('root') PathPart('') Args(0) { @$releases; $c->res->last_modified($date) if $date; + my ( $aggregated, $latest ) = @{ $self->_calc_aggregated($releases) }; + $c->stash( { - author => $author, - faves => $faves, - releases => $releases, - show_author => 1, - template => 'author.html', - took => $took, - total => $data->{hits}->{total}, + aggregated => $aggregated, + author => $author, + faves => $faves, + latest => $latest, + releases => $releases, + template => 'author.html', + took => $took, + total => $data->{hits}->{total}, } ); @@ -129,6 +132,29 @@ sub releases : Chained('root') PathPart Args(0) { ); } +sub _calc_aggregated { + my ( $self, $releases ) = @_; + + my @aggregated; + my $latest = $releases->[0]; + my $last; + + for my $rel ( @{$releases} ) { + my ( $canon_rel, $canon_lat ) = map { + DateTime::Format::ISO8601->parse_datetime($_) + ->strftime("%Y%m%d%H%M%S") + } ( $rel->{date}, $latest->{date} ); + $latest = $rel if $canon_rel > $canon_lat; + + next if $last and $last eq $rel->{distribution}; + $last = $rel->{distribution}; + next unless $rel->{name}; + push @aggregated, $rel; + } + + return [ \@aggregated, $latest ]; +} + __PACKAGE__->meta->make_immutable; 1; diff --git a/lib/MetaCPAN/Web/View/HTML.pm b/lib/MetaCPAN/Web/View/HTML.pm index b5a345ed85..342e63085b 100644 --- a/lib/MetaCPAN/Web/View/HTML.pm +++ b/lib/MetaCPAN/Web/View/HTML.pm @@ -60,15 +60,6 @@ sub format_datetime { ); } -sub canonical_datetime { - my $date = shift; - my $dt = parse_datetime($date); - return int( - sprintf( '%04d%02d%02d%02d%02d%02d', - @$dt{qw(year month day hour minute second)} ) - ); -} - # format just the date consistent with W3CDTF / ISO 8601 / RFC 3339 sub common_date_format { my $date = shift; @@ -80,9 +71,6 @@ Template::Alloy->define_vmethod( 'text', dt => \&parse_datetime ); Template::Alloy->define_vmethod( 'text', dt_http => \&format_datetime ); -Template::Alloy->define_vmethod( 'text', - dt_canonical => \&canonical_datetime ); - Template::Alloy->define_vmethod( 'text', dt_date_common => \&common_date_format ); diff --git a/root/author.html b/root/author.html index 4a1f6be72c..6498f5fb5d 100644 --- a/root/author.html +++ b/root/author.html @@ -93,24 +93,6 @@ <% END; END; END %> - <% - i = 0; - aggregated = []; - latest = releases[0]; - FOREACH release IN releases; - IF release.date.dt_canonical > latest.date.dt_canonical; - latest = release; - END; - IF last == release.distribution; - NEXT; - ELSE; - last = release.distribution; - END; - UNLESS release.name; - NEXT; - END; - aggregated.push(release); - END %>