aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStruan Donald <struan@exo.org.uk>2017-09-15 10:59:05 +0100
committerStruan Donald <struan@exo.org.uk>2017-10-18 15:37:25 +0100
commit380c19978f9d9b6d3eb8080018b50435780f829f (patch)
tree88555835b59676f52672e4f9d445460207d3d7d4
parent56a4f2d8ea52623cc8184da921ea5fd5c0124c1d (diff)
select all applicable filter states on report page
Make sure that all relevant options in the filter status drop down are checked to handle staff users who can see the full set of states and not just open, closed and fixed Also restore custom label for no states checked. Fixes mysociety/forcouncils#227
-rw-r--r--CHANGELOG.md1
-rw-r--r--perllib/FixMyStreet/App/Controller/Reports.pm3
-rw-r--r--templates/web/base/reports/_list-filters.html16
-rw-r--r--templates/web/base/reports/_status_filter_options.html3
-rw-r--r--templates/web/oxfordshire/reports/_status_filter_options.html7
-rw-r--r--web/cobrands/fixmystreet/fixmystreet.js22
6 files changed, 42 insertions, 10 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e2a49dcc6..823d8c48d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,7 @@
- Only create one update when staff user updating category #1857
- Do not include blank updates in email alerts #1857
- Redirect inspectors correctly on creation in two-tier.
+ - Report status filter All option works for body users #1845
- Admin improvements:
- Character length limit can be placed on report detailed information #1848
- Inspector panel shows nearest address if available #1850
diff --git a/perllib/FixMyStreet/App/Controller/Reports.pm b/perllib/FixMyStreet/App/Controller/Reports.pm
index 187dfb299..8beb2c091 100644
--- a/perllib/FixMyStreet/App/Controller/Reports.pm
+++ b/perllib/FixMyStreet/App/Controller/Reports.pm
@@ -539,16 +539,19 @@ sub stash_report_filter_status : Private {
my $s = FixMyStreet::DB::Result::Problem->open_states();
%filter_problem_states = (%filter_problem_states, %$s);
$filter_status{open} = 1;
+ $filter_status{$_} = 1 for keys %$s;
}
if ($status{closed}) {
my $s = FixMyStreet::DB::Result::Problem->closed_states();
%filter_problem_states = (%filter_problem_states, %$s);
$filter_status{closed} = 1;
+ $filter_status{$_} = 1 for keys %$s;
}
if ($status{fixed}) {
my $s = FixMyStreet::DB::Result::Problem->fixed_states();
%filter_problem_states = (%filter_problem_states, %$s);
$filter_status{fixed} = 1;
+ $filter_status{$_} = 1 for keys %$s;
}
if ($status{all}) {
diff --git a/templates/web/base/reports/_list-filters.html b/templates/web/base/reports/_list-filters.html
index 50e88857d..ab8ac06f7 100644
--- a/templates/web/base/reports/_list-filters.html
+++ b/templates/web/base/reports/_list-filters.html
@@ -1,10 +1,18 @@
[% select_status = BLOCK %]
<select class="form-control js-multiple" name="status" id="statuses" multiple
- data-all="[% loc('All') %]" data-all-options='["open","closed","fixed"]'
- [%~ IF c.cobrand.on_map_default_status == 'open' %]
- data-none="[% loc('Unfixed reports') %]"
+ data-all="[% loc('All') %]"
+ [% IF c.user_exists AND c.user.is_superuser OR c.user.belongs_to_body(body.id) %]
+ [% options = []; FOR group IN filter_states; FOR state IN group.1; NEXT IF state == 'hidden'; options.push(state); END; END %]
+ data-all-options='["[% options.join('", "') %]"]'
+ [%~ ELSE ~%]
+ [%~ IF has_fixed_state ~%]
+ data-all-options='["open","closed","fixed"]'
+ [%~ ELSE ~%]
+ data-all-options='["open","closed"]'
+ [%~ END ~%]
[%~ END ~%]
- >
+ [% INCLUDE 'reports/_status_filter_options.html' %]
+ >
[% IF c.user_exists AND c.user.has_body_permission_to('planned_reports') AND !shortlist %]
<option value="shortlisted"[% ' selected' IF filter_status.shortlisted %]>[% loc('Shortlisted') %]</option>
<option value="unshortlisted"[% ' selected' IF filter_status.unshortlisted %]>[% loc('Unshortlisted') %]</option>
diff --git a/templates/web/base/reports/_status_filter_options.html b/templates/web/base/reports/_status_filter_options.html
new file mode 100644
index 000000000..b761222e0
--- /dev/null
+++ b/templates/web/base/reports/_status_filter_options.html
@@ -0,0 +1,3 @@
+ [%~ IF c.cobrand.on_map_default_status == 'open' %]
+ data-none="[% prettify_state('confirmed') %]"
+ [%~ END ~%]
diff --git a/templates/web/oxfordshire/reports/_status_filter_options.html b/templates/web/oxfordshire/reports/_status_filter_options.html
new file mode 100644
index 000000000..7f4fd5ace
--- /dev/null
+++ b/templates/web/oxfordshire/reports/_status_filter_options.html
@@ -0,0 +1,7 @@
+ [% IF c.user_exists AND c.user.is_superuser OR c.user.belongs_to_body(body.id) %]
+ data-none="All unresolved"
+ data-extra="All unresolved"
+ data-extra-options='["confirmed","investigating","action scheduled"]'
+ [% ELSE %]
+ data-none="Open"
+ [%~ END ~%]
diff --git a/web/cobrands/fixmystreet/fixmystreet.js b/web/cobrands/fixmystreet/fixmystreet.js
index cc156569f..6825ecbce 100644
--- a/web/cobrands/fixmystreet/fixmystreet.js
+++ b/web/cobrands/fixmystreet/fixmystreet.js
@@ -113,15 +113,25 @@ function isR2L() {
make_multi: function() {
var $this = $(this),
- all = $this.data('all');
+ all = $this.data('all'),
+ none = $this.data('none') || all,
+ allOpts = $this.data('all-options') || [],
+ extra = $this.data('extra'),
+ extraOpts = $this.data('extra-options') || [];
+
+ var presets = [{
+ name: all,
+ options: allOpts
+ }];
+
+ if (extra) {
+ presets.push({name: extra, options: extraOpts});
+ }
$this.multiSelect({
allText: all,
- noneText: all,
+ noneText: none,
positionMenuWithin: $('#side'),
- presets: [{
- name: all,
- options: []
- }]
+ presets: presets
});
}