aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm11
-rw-r--r--web/cobrands/fixmystreet/assets.js80
-rw-r--r--web/cobrands/westminster/assets.js3
3 files changed, 57 insertions, 37 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm
index c41b65e2a..103509863 100644
--- a/perllib/FixMyStreet/App/Controller/Report/New.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/New.pm
@@ -1025,7 +1025,16 @@ sub process_report : Private {
my $body_string = do {
if (my $single_body_only = $c->get_param('single_body_only')) {
my $body = $c->model('DB::Body')->search({ name => $single_body_only })->first;
- $body ? $body->id : '-1';
+ if ($body) {
+ # Drop the contacts down to those in this body
+ # (potentially none for e.g. Highways England)
+ # so that set_report_extras doesn't error when
+ # there are 'missing' extra fields
+ @contacts = grep { $_->body->id == $body->id } @contacts;
+ $body->id;
+ } else {
+ '-1';
+ }
} else {
my $contact_options = {};
$contact_options->{do_not_send} = [ $c->get_param_list('do_not_send', 1) ];
diff --git a/web/cobrands/fixmystreet/assets.js b/web/cobrands/fixmystreet/assets.js
index 5a25cc128..1de595c53 100644
--- a/web/cobrands/fixmystreet/assets.js
+++ b/web/cobrands/fixmystreet/assets.js
@@ -275,8 +275,9 @@ function init_asset_layer(layer, pins_layer) {
layer.fixmystreet.fault_layer.setZIndex(layer.getZIndex()-1);
}
- if (fixmystreet.page == 'new' && (layer.fixmystreet.usrn || layer.fixmystreet.road)) {
- // If the user visits /report/new directly and doesn't change the pin
+ if (layer.fixmystreet.usrn || layer.fixmystreet.road) {
+ // If an asset layer only loads once a category is selected, or if the
+ // user visits /report/new directly and doesn't change the pin
// location, then the assets:selected/maps:update_pin events are never
// fired and USRN's checkFeature is never called. This results in a
// report whose location was never looked up against the USRN layer,
@@ -1088,18 +1089,34 @@ fixmystreet.message_controller = (function() {
return false;
}
- // make sure we fire the code to check if an asset is selected if
- // we change options in the Highways England message
- $(fixmystreet).on('report_new:highways_change', function() {
- if (fixmystreet.body_overrides.get_only_send() === 'Highways England') {
- $('#' + stopperId).remove(); // Get rid of any stopper message
- responsibility_off(); // Will also reenable form
+ function is_matching_stopper(stopper, i) {
+ var only_send = fixmystreet.body_overrides.get_only_send();
+ var body = $('#form_category').data('body');
+
+ if (OpenLayers.Util.indexOf(ignored_bodies, body) > -1) {
+ return false;
+ }
+
+ var category = $('#form_category').val();
+ if (category != stopper.category) {
+ return false;
+ }
+ if (only_send == 'TfL') {
+ return false;
+ }
+
+ if (stopper.answers) {
+ var answer = $('#form_' + stopper.code).val();
+ if (OpenLayers.Util.indexOf(stopper.answers, answer) > -1) {
+ return true;
+ }
+ return false;
} else {
- $(fixmystreet).trigger('report_new:category_change');
+ return true;
}
- });
+ }
- $(fixmystreet).on('report_new:category_change', function() {
+ function check_for_stopper() {
var only_send = fixmystreet.body_overrides.get_only_send();
if (only_send == 'Highways England') {
// If we're sending to Highways England, this message doesn't matter
@@ -1107,31 +1124,7 @@ fixmystreet.message_controller = (function() {
}
var $id = $('#' + stopperId);
- var body = $('#form_category').data('body');
- var matching = $.grep(stoppers, function(stopper, i) {
- if (OpenLayers.Util.indexOf(ignored_bodies, body) > -1) {
- return false;
- }
-
- var category = $('#form_category').val();
- if (category != stopper.category) {
- return false;
- }
- if (only_send == 'TfL') {
- return false;
- }
-
- if (stopper.answers) {
- var answer = $('#form_' + stopper.code).val();
- if (OpenLayers.Util.indexOf(stopper.answers, answer) > -1) {
- return true;
- }
- return false;
- } else {
- return true;
- }
- });
-
+ var matching = $.grep(stoppers, is_matching_stopper);
if (!matching.length) {
$id.remove();
if ( !$('#js-roads-responsibility').is(':visible') && !$('#js-duplicate-reports').is(':visible') ) {
@@ -1157,8 +1150,21 @@ fixmystreet.message_controller = (function() {
$msg.insertBefore('#js-post-category-messages');
}
disable_report_form(stopper.keep_category_extras);
+ }
+
+ // make sure we fire the code to check if an asset is selected if
+ // we change options in the Highways England message
+ $(fixmystreet).on('report_new:highways_change', function() {
+ if (fixmystreet.body_overrides.get_only_send() === 'Highways England') {
+ $('#' + stopperId).remove(); // Get rid of any stopper message
+ responsibility_off(); // Will also reenable form
+ } else {
+ $(fixmystreet).trigger('report_new:category_change');
+ }
});
+ $(fixmystreet).on('report_new:category_change', check_for_stopper);
+
return {
asset_found: function() {
responsibility_off();
@@ -1212,6 +1218,8 @@ fixmystreet.message_controller = (function() {
stoppers = [];
},
+ check_for_stopper: check_for_stopper,
+
add_ignored_body: function(body) {
ignored_bodies.push(body);
}
diff --git a/web/cobrands/westminster/assets.js b/web/cobrands/westminster/assets.js
index e015f35a1..1c0358301 100644
--- a/web/cobrands/westminster/assets.js
+++ b/web/cobrands/westminster/assets.js
@@ -101,12 +101,15 @@ fixmystreet.assets.add(defaults, {
found: function(layer, feature) {
if (!fixmystreet.assets.selectedFeature()) {
fixmystreet.body_overrides.only_send('TfL');
+ $('#category_meta').empty();
} else {
fixmystreet.body_overrides.remove_only_send();
}
+ fixmystreet.message_controller.check_for_stopper();
},
not_found: function(layer) {
fixmystreet.body_overrides.remove_only_send();
+ fixmystreet.message_controller.check_for_stopper();
}
}
});