aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/App/Controller/Report.pm2
-rw-r--r--perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm27
-rw-r--r--perllib/FixMyStreet/Roles/ContactExtra.pm3
-rw-r--r--templates/web/base/report/_inspect.html4
-rw-r--r--web/cobrands/fixmystreet/staff.js43
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));