diff options
-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)); |