diff options
author | Matthew Somerville <matthew-github@dracos.co.uk> | 2017-06-20 18:10:28 +0100 |
---|---|---|
committer | Matthew Somerville <matthew-github@dracos.co.uk> | 2017-06-30 17:21:20 +0100 |
commit | 7b06aae99229d9a5a8544f4aa106682a8c02b497 (patch) | |
tree | 0f9d3177bd57e366244120e39dc532779b305311 | |
parent | 225dd2398de39ba38006a3ec4e2f854aede55537 (diff) |
Update templates when category/state changed.
When the category or state changes, the list of available templates
updates (previously it was frozen at what the category was on page
load, and didn't care about the state).
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report.pm | 2 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm | 27 | ||||
-rw-r--r-- | perllib/FixMyStreet/Roles/ContactExtra.pm | 3 | ||||
-rw-r--r-- | templates/web/base/report/_inspect.html | 4 | ||||
-rw-r--r-- | web/cobrands/fixmystreet/staff.js | 43 |
5 files changed, 66 insertions, 13 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report.pm b/perllib/FixMyStreet/App/Controller/Report.pm index 223cea9b4..ef10dc32e 100644 --- a/perllib/FixMyStreet/App/Controller/Report.pm +++ b/perllib/FixMyStreet/App/Controller/Report.pm @@ -315,6 +315,8 @@ sub inspect : Private { if ($c->cobrand->can('council_area_id')) { my $priorities_by_category = FixMyStreet::App->model('DB::ResponsePriority')->by_categories($c->cobrand->council_area_id, @{$c->stash->{contacts}}); $c->stash->{priorities_by_category} = $priorities_by_category; + my $templates_by_category = FixMyStreet::App->model('DB::ResponseTemplate')->by_categories($c->cobrand->council_area_id, @{$c->stash->{contacts}}); + $c->stash->{templates_by_category} = $templates_by_category; } if ( $c->get_param('save') ) { diff --git a/perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm b/perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm new file mode 100644 index 000000000..aa070daa3 --- /dev/null +++ b/perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm @@ -0,0 +1,27 @@ +package FixMyStreet::DB::ResultSet::ResponseTemplate; +use base 'DBIx::Class::ResultSet'; + +use Moo; +use HTML::Entities; + +with('FixMyStreet::Roles::ContactExtra'); + +sub join_table { + return 'contact_response_templates'; +} + +sub name_column { + 'title'; +} + +sub map_extras { + my ($rs, @ts) = @_; + return map { + my $out = { id => encode_entities($_->text), name => encode_entities($_->title) }; + $out->{state} = encode_entities($_->state) if $_->state; + $out; + } @ts; +} + +1; + diff --git a/perllib/FixMyStreet/Roles/ContactExtra.pm b/perllib/FixMyStreet/Roles/ContactExtra.pm index d23a094f3..fc6531e54 100644 --- a/perllib/FixMyStreet/Roles/ContactExtra.pm +++ b/perllib/FixMyStreet/Roles/ContactExtra.pm @@ -11,8 +11,9 @@ sub for_bodies { my $attrs = { 'me.body_id' => $bodies, }; + my $order = $rs->can('name_column') ? $rs->name_column() : 'name'; my $filters = { - order_by => 'name', + order_by => $order, join => { $join_table => 'contact' }, distinct => 1, }; diff --git a/templates/web/base/report/_inspect.html b/templates/web/base/report/_inspect.html index 67e28ca1d..98925271d 100644 --- a/templates/web/base/report/_inspect.html +++ b/templates/web/base/report/_inspect.html @@ -46,11 +46,11 @@ [% cat_prefix = category | lower | replace('[^a-z]', '') %] [% cat_prefix = "category_" _ cat_prefix _ "_" %] [% IF category == problem.category %] - <p data-category="[% category | html %]" data-priorities='[% priorities_by_category.$category %]' data-defect-types='[% category_defect_types.$category %]'> + <p data-category="[% category | html %]" data-priorities='[% priorities_by_category.$category %]' data-defect-types='[% category_defect_types.$category %]' data-templates='[% templates_by_category.$category %]'> [% INCLUDE 'report/new/category_extras_fields.html' %] </p> [% ELSE %] - <p data-category="[% category | html %]" class="hidden" data-priorities='[% priorities_by_category.$category %]' data-defect-types='[% category_defect_types.$category %]'> + <p data-category="[% category | html %]" class="hidden" data-priorities='[% priorities_by_category.$category %]' data-defect-types='[% category_defect_types.$category %]' data-templates='[% templates_by_category.$category %]'> [% INCLUDE 'report/new/category_extras_fields.html' report_meta='' %] </p> [% END %] diff --git a/web/cobrands/fixmystreet/staff.js b/web/cobrands/fixmystreet/staff.js index febd306ba..50d049217 100644 --- a/web/cobrands/fixmystreet/staff.js +++ b/web/cobrands/fixmystreet/staff.js @@ -184,7 +184,8 @@ $.extend(fixmystreet.set_up, { }, report_page_inspect: function() { - var $inspect_form = $('form#report_inspect_form'); + var $inspect_form = $('form#report_inspect_form'), + $templates = $('#templates_for_public_update'); if (!$inspect_form.length) { return; @@ -193,6 +194,31 @@ $.extend(fixmystreet.set_up, { // Focus on form $('html,body').scrollTop($inspect_form.offset().top); + function updateTemplates(opts) { + opts.category = opts.category || $inspect_form.find('[name=category]').val(); + opts.state = opts.state || $inspect_form.find('[name=state]').val(); + var selector = "[data-category='" + opts.category + "']"; + var data = $inspect_form.find(selector).data('templates') || []; + data = $.grep(data, function(d, i) { + if (!d.state || d.state == opts.state) { + return true; + } + return false; + }); + populateSelect($templates, data, 'templates_format'); + } + + function populateSelect($select, data, label_formatter) { + $select.find('option:gt(0)').remove(); + $.each(data, function(k,v) { + label = window.fixmystreet.utils[label_formatter](v); + $opt = $('<option></option>').attr('value', v.id).text(label); + if (v.state) { + $opt.attr('data-problem-state', v.state); + } + $select.append($opt); + }); + } // On the manage/inspect report form, we already have all the extra inputs // in the DOM, we just need to hide/show them as appropriate. @@ -206,20 +232,12 @@ $.extend(fixmystreet.set_up, { priorities_data = entry.data('priorities') || [], curr_pri = $priorities.val(); - function populateSelect($select, data, label_formatter) { - $select.find('option:gt(0)').remove(); - $.each(data, function(k,v) { - label = window.fixmystreet.utils[label_formatter](v); - $select.append($('<option></option>') - .attr('value', v.id).text(label)); - }); - } - $inspect_form.find("[data-category]:not(" + selector + ")").addClass("hidden"); entry.removeClass("hidden"); populateSelect($priorities, priorities_data, 'priorities_type_format'); populateSelect($defect_types, defect_types_data, 'defect_type_format'); + updateTemplates({'category': category}); $priorities.val(curr_pri); }); @@ -230,6 +248,8 @@ $.extend(fixmystreet.set_up, { var value = $submit.attr('data-value-'+state); $submit.val(value || $submit.data('valueOriginal')); + updateTemplates({'state': state}); + // We might also have a response template to preselect for the new state var $select = $inspect_form.find("select.js-template-name"); var $option = $select.find("option[data-problem-state='"+state+"']").first(); @@ -453,6 +473,9 @@ $.extend(fixmystreet.utils, { priorities_type_format: function(data) { return data.name; }, + templates_format: function(data) { + return data.name; + }, toggle_shortlist: function(btn, sw, id) { btn.attr('class', 'item-list__item__shortlist-' + sw); btn.attr('title', btn.data('label-' + sw)); |