aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Somerville <matthew-github@dracos.co.uk>2017-06-30 20:08:22 +0100
committerMatthew Somerville <matthew-github@dracos.co.uk>2017-06-30 20:08:22 +0100
commitaf5c9769ed7f3d4217d9a5de21cf07aa977737be (patch)
tree84ff5a5050e7d4e2100df9c884c348ea8317464f
parent30dd9d8bd1f4229bf5cb0a8c559ba00dba35b750 (diff)
parent7b06aae99229d9a5a8544f4aa106682a8c02b497 (diff)
Merge branch 'issues/forcouncils/193-state-of-the-template'
-rwxr-xr-xbin/fixmystreet.com/fixture9
-rw-r--r--perllib/FixMyStreet/App/Controller/Report.pm2
-rw-r--r--perllib/FixMyStreet/DB/Factories.pm25
-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.js74
7 files changed, 115 insertions, 29 deletions
diff --git a/bin/fixmystreet.com/fixture b/bin/fixmystreet.com/fixture
index 9bb9435c5..d3b0a8349 100755
--- a/bin/fixmystreet.com/fixture
+++ b/bin/fixmystreet.com/fixture
@@ -67,6 +67,14 @@ my $body = FixMyStreet::DB::Factory::Body->find_or_create({
});
say "Created body " . $body->name . " for MapIt area ID " . $opt->area_id . ', categories ' . join(', ', @$categories);
+FixMyStreet::DB::Factory::ResponseTemplate->create({ body => $body, title => 'Generic' });
+FixMyStreet::DB::Factory::ResponseTemplate->create({ body => $body, title => 'Fixed', state => 'fixed - council' });
+FixMyStreet::DB::Factory::ResponseTemplate->create({ body => $body, title => 'Monitoring', state => 'unable to fix' });
+my $template = FixMyStreet::DB::Factory::ResponseTemplate->create({ body => $body, title => 'Not us', state => 'not responsible' });
+$template->add_to_contacts($body->contacts->first);
+my $priority = FixMyStreet::DB::Factory::ResponsePriority->create_batch(3, { body => $body });
+$priority->[0]->add_to_contacts($body->contacts->first);
+
# Users
say "Created users, all with password 'password':";
my $user; # Will store the final (normal) user of the loop for later user
@@ -123,6 +131,7 @@ for (1..$num) {
my $titles = $titles{$category};
push @$problems, FixMyStreet::DB::Factory::Problem->create({
body => $body,
+ areas => ',' . $opt->area_id . ',',
user => $user,
postcode => $postcode->{postcode},
latitude => $postcode->{wgs84_lat} + rand($inaccurate_km) - $inaccurate_km / 2,
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/Factories.pm b/perllib/FixMyStreet/DB/Factories.pm
index c3060507e..acf88063e 100644
--- a/perllib/FixMyStreet/DB/Factories.pm
+++ b/perllib/FixMyStreet/DB/Factories.pm
@@ -100,6 +100,31 @@ __PACKAGE__->fields({
#######################
+package FixMyStreet::DB::Factory::ResponseTemplate;
+
+use parent -norequire, "FixMyStreet::DB::Factory::Base";
+
+__PACKAGE__->resultset(FixMyStreet::DB->resultset("ResponseTemplate"));
+
+__PACKAGE__->fields({
+ text => __PACKAGE__->seq(sub { 'Template text #' . (shift()+1) }),
+});
+
+#######################
+
+package FixMyStreet::DB::Factory::ResponsePriority;
+
+use parent "DBIx::Class::Factory";
+
+__PACKAGE__->resultset(FixMyStreet::DB->resultset("ResponsePriority"));
+
+__PACKAGE__->fields({
+ name => __PACKAGE__->seq(sub { 'Priority #' . (shift()+1) }),
+ description => __PACKAGE__->seq(sub { 'Description #' . (shift()+1) }),
+});
+
+#######################
+
package FixMyStreet::DB::Factory::Comment;
use parent "DBIx::Class::Factory";
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 7f248acb8..50d049217 100644
--- a/web/cobrands/fixmystreet/staff.js
+++ b/web/cobrands/fixmystreet/staff.js
@@ -184,52 +184,71 @@ $.extend(fixmystreet.set_up, {
},
report_page_inspect: function() {
- if (!$('form#report_inspect_form').length) {
+ var $inspect_form = $('form#report_inspect_form'),
+ $templates = $('#templates_for_public_update');
+
+ if (!$inspect_form.length) {
return;
}
// Focus on form
- $('html,body').scrollTop($('#report_inspect_form').offset().top);
+ $('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.
- $('form#report_inspect_form [name=category]').change(function() {
+ $inspect_form.find('[name=category]').change(function() {
var category = $(this).val(),
selector = "[data-category='" + category + "']",
+ entry = $inspect_form.find(selector),
$priorities = $('#problem_priority'),
$defect_types = $('#defect_type'),
- defect_types_data = $("form#report_inspect_form " + selector).data('defect-types') || [],
- priorities_data = $("form#report_inspect_form " + selector).data('priorities') || [],
+ defect_types_data = entry.data('defect-types') || [],
+ 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));
- });
- }
-
- $("form#report_inspect_form [data-category]:not(" + selector + ")").addClass("hidden");
- $("form#report_inspect_form " + selector).removeClass("hidden");
+ $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);
});
// The inspect form submit button can change depending on the selected state
- $("#report_inspect_form [name=state]").change(function(){
+ $inspect_form.find("[name=state]").change(function(){
var state = $(this).val();
- var $inspect_form = $("#report_inspect_form");
- var $submit = $inspect_form.find("input[type=submit]");
+ var $submit = $inspect_form.find("input[type=submit][name=save]");
var value = $submit.attr('data-value-'+state);
- if (value !== undefined) {
- $submit.val(value);
- } else {
- $submit.val($submit.data('valueOriginal'));
- }
+ $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");
@@ -265,8 +284,8 @@ $.extend(fixmystreet.set_up, {
$("#problem_easting").text(bng.lon.toFixed(1));
$("#problem_latitude").text(latlon.lat.toFixed(6));
$("#problem_longitude").text(latlon.lon.toFixed(6));
- $("form#report_inspect_form input[name=latitude]").val(latlon.lat);
- $("form#report_inspect_form input[name=longitude]").val(latlon.lon);
+ $inspect_form.find("input[name=latitude]").val(latlon.lat);
+ $inspect_form.find("input[name=longitude]").val(latlon.lon);
});
}
@@ -454,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));