diff options
author | Matthew Somerville <matthew-github@dracos.co.uk> | 2016-11-01 16:56:08 +0000 |
---|---|---|
committer | Matthew Somerville <matthew-github@dracos.co.uk> | 2016-11-04 17:24:46 +0000 |
commit | 051093f803444d99c48d130d59dcfe2ba9759c90 (patch) | |
tree | 7407d9616442dc5bc9c81f29532b9a5b7704b6f5 /perllib/FixMyStreet/App/Controller | |
parent | b3bb51dab4f620463c551e7bbe6814d415ebf227 (diff) |
Add sort order options to list pages.
Includes newest, oldest, least/most recently updated, and most comments.
The default remains the same, which is last updated on /reports, and
newest on /my and /around (the latter plus not-in-view
sorted-by-distance ones).
Diffstat (limited to 'perllib/FixMyStreet/App/Controller')
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Around.pm | 10 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/My.pm | 5 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Reports.pm | 27 |
3 files changed, 36 insertions, 6 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Around.pm b/perllib/FixMyStreet/App/Controller/Around.pm index cd96c3b5d..b4f94bb35 100644 --- a/perllib/FixMyStreet/App/Controller/Around.pm +++ b/perllib/FixMyStreet/App/Controller/Around.pm @@ -176,13 +176,16 @@ sub display_location : Private { # Check the category to filter by, if any, is valid $c->forward('check_and_stash_category'); + $c->forward( '/reports/stash_report_sort', [ 'created-desc' ]); # get the map features my ( $on_map_all, $on_map, $nearby, $distance ) = FixMyStreet::Map::map_features( $c, latitude => $latitude, longitude => $longitude, interval => $interval, categories => $c->stash->{filter_category}, - states => $c->stash->{filter_problem_states} ); + states => $c->stash->{filter_problem_states}, + order => $c->stash->{sort_order}, + ); # copy the found reports to the stash $c->stash->{on_map} = $on_map; @@ -293,13 +296,16 @@ sub ajax : Path('/ajax') { my $interval = $all_pins ? undef : $c->cobrand->on_map_default_max_pin_age; $c->forward( '/reports/stash_report_filter_status' ); + $c->forward( '/reports/stash_report_sort', [ 'created-desc' ]); # extract the data from the map my ( $on_map_all, $on_map_list, $nearby, $dist ) = FixMyStreet::Map::map_features($c, bbox => $bbox, interval => $interval, categories => [ $c->get_param_list('filter_category', 1) ], - states => $c->stash->{filter_problem_states} ); + states => $c->stash->{filter_problem_states}, + order => $c->stash->{sort_order}, + ); # create a list of all the pins my @pins = map { diff --git a/perllib/FixMyStreet/App/Controller/My.pm b/perllib/FixMyStreet/App/Controller/My.pm index b6f425ead..51f1687ee 100644 --- a/perllib/FixMyStreet/App/Controller/My.pm +++ b/perllib/FixMyStreet/App/Controller/My.pm @@ -57,6 +57,7 @@ sub get_problems : Private { my $p_page = $c->get_param('p') || 1; $c->forward( '/reports/stash_report_filter_status' ); + $c->forward('/reports/stash_report_sort', [ 'created-desc' ]); my $pins = []; my $problems = []; @@ -73,9 +74,9 @@ sub get_problems : Private { } my $rs = $c->stash->{problems_rs}->search( $params, { - order_by => { -desc => 'confirmed' }, + order_by => $c->stash->{sort_order}, rows => 50 - } )->page( $p_page ); + } )->include_comment_counts->page( $p_page ); while ( my $problem = $rs->next ) { $c->stash->{has_content}++; diff --git a/perllib/FixMyStreet/App/Controller/Reports.pm b/perllib/FixMyStreet/App/Controller/Reports.pm index f05096525..813c2052d 100644 --- a/perllib/FixMyStreet/App/Controller/Reports.pm +++ b/perllib/FixMyStreet/App/Controller/Reports.pm @@ -365,6 +365,8 @@ sub check_canonical_url : Private { sub load_and_group_problems : Private { my ( $self, $c ) = @_; + $c->forward('stash_report_sort', [ $c->cobrand->reports_ordering ]); + my $page = $c->get_param('p') || 1; # NB: If 't' is specified, it will override 'status'. my $type = $c->get_param('t') || 'all'; @@ -411,10 +413,10 @@ sub load_and_group_problems : Private { $problems = $problems->search( $where, { - order_by => $c->cobrand->reports_ordering, + order_by => $c->stash->{sort_order}, rows => $c->cobrand->reports_per_page, } - )->page( $page ); + )->include_comment_counts->page( $page ); $c->stash->{pager} = $problems->pager; my ( %problems, @pins ); @@ -502,6 +504,27 @@ sub stash_report_filter_status : Private { return 1; } +sub stash_report_sort : Private { + my ( $self, $c, $default ) = @_; + + my %types = ( + updated => 'lastupdate', + created => 'confirmed', + comments => 'comment_count', + ); + + my $sort = $c->get_param('sort') || $default; + $sort = $default unless $sort =~ /^((updated|created)-(desc|asc)|comments-desc)$/; + $sort =~ /^(updated|created|comments)-(desc|asc)$/; + my $order_by = $types{$1} || $1; + my $dir = $2; + $order_by = { -desc => $order_by } if $dir eq 'desc'; + + $c->stash->{sort_key} = $sort; + $c->stash->{sort_order} = $order_by; + return 1; +} + sub add_row { my ( $c, $problem, $body, $problems, $pins ) = @_; push @{$problems->{$body}}, $problem; |