diff options
author | Struan Donald <struan@exo.org.uk> | 2017-09-15 10:59:05 +0100 |
---|---|---|
committer | Struan Donald <struan@exo.org.uk> | 2017-10-18 15:37:25 +0100 |
commit | 380c19978f9d9b6d3eb8080018b50435780f829f (patch) | |
tree | 88555835b59676f52672e4f9d445460207d3d7d4 | |
parent | 56a4f2d8ea52623cc8184da921ea5fd5c0124c1d (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.md | 1 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Reports.pm | 3 | ||||
-rw-r--r-- | templates/web/base/reports/_list-filters.html | 16 | ||||
-rw-r--r-- | templates/web/base/reports/_status_filter_options.html | 3 | ||||
-rw-r--r-- | templates/web/oxfordshire/reports/_status_filter_options.html | 7 | ||||
-rw-r--r-- | web/cobrands/fixmystreet/fixmystreet.js | 22 |
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 }); } |