aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/App/Controller
diff options
context:
space:
mode:
authorMatthew Somerville <matthew-github@dracos.co.uk>2016-11-01 16:56:08 +0000
committerMatthew Somerville <matthew-github@dracos.co.uk>2016-11-04 17:24:46 +0000
commit051093f803444d99c48d130d59dcfe2ba9759c90 (patch)
tree7407d9616442dc5bc9c81f29532b9a5b7704b6f5 /perllib/FixMyStreet/App/Controller
parentb3bb51dab4f620463c551e7bbe6814d415ebf227 (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.pm10
-rw-r--r--perllib/FixMyStreet/App/Controller/My.pm5
-rw-r--r--perllib/FixMyStreet/App/Controller/Reports.pm27
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;