aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm72
-rw-r--r--perllib/FixMyStreet/Cobrand/Bexley.pm1
-rw-r--r--perllib/FixMyStreet/DB/Result/Problem.pm7
-rw-r--r--t/app/controller/report_new_open311.t47
-rw-r--r--t/app/model/problem.t9
-rw-r--r--templates/web/base/report/form/user_loggedout_by_email.html6
-rw-r--r--templates/web/base/report/form/user_loggedout_email.html1
-rw-r--r--templates/web/base/report/form/user_loggedout_password.html6
-rw-r--r--templates/web/base/report/new/category_extras_fields.html2
-rw-r--r--templates/web/base/report/new/category_wrapper.html6
-rw-r--r--templates/web/base/report/new/form_report.html16
-rw-r--r--templates/web/base/report/new/form_title.html2
-rw-r--r--templates/web/base/report/new/form_user.html2
-rw-r--r--templates/web/bristol/footer_extra_js.html2
-rw-r--r--templates/web/bromley/report/form/user_loggedout_email.html1
-rw-r--r--templates/web/northamptonshire/report/new/roads_message.html5
-rw-r--r--web/cobrands/bexley/js.js39
-rw-r--r--web/cobrands/bristol/js.js24
-rw-r--r--web/cobrands/fixmystreet-uk-councils/roadworks.js49
-rw-r--r--web/cobrands/fixmystreet/assets.js93
-rw-r--r--web/cobrands/westminster/assets.js3
21 files changed, 286 insertions, 107 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm
index c41b65e2a..554fbc3b7 100644
--- a/perllib/FixMyStreet/App/Controller/Report/New.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/New.pm
@@ -143,6 +143,7 @@ sub report_new_ajax : Path('mobile') : Args(0) {
$c->forward('setup_categories_and_bodies');
$c->forward('setup_report_extra_fields');
+ $c->forward('check_for_category');
$c->forward('process_report');
$c->forward('process_user');
$c->forward('/photo/process_photo');
@@ -253,10 +254,7 @@ sub category_extras_ajax : Path('category_extras') : Args(0) {
$c->forward('setup_report_extra_fields');
$c->forward('check_for_category');
- my $category = $c->stash->{category} || "";
- $category = '' if $category eq _('-- Pick a category --');
-
- $c->stash->{json_response} = $c->forward('by_category_ajax_data', [ 'one', $category ]);
+ $c->stash->{json_response} = $c->forward('by_category_ajax_data', [ 'one', $c->stash->{category} ]);
$c->forward('send_json_response');
}
@@ -949,12 +947,12 @@ sub process_report : Private {
'title', 'detail', 'pc', #
'detail_size',
'may_show_name', #
- 'category', #
'subcategory', #
'partial', #
'service', #
'non_public',
);
+ $params{category} = $c->stash->{category};
# load the report
my $report = $c->stash->{report};
@@ -1025,7 +1023,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) ];
@@ -1133,7 +1140,7 @@ sub set_report_extras : Private {
foreach my $item (@metalist) {
my ($metas, $param_prefix) = @$item;
foreach my $field ( @$metas ) {
- if ( lc( $field->{required} ) eq 'true' && !$c->cobrand->category_extra_hidden($field)) {
+ if ( lc( $field->{required} || '' ) eq 'true' && !$c->cobrand->category_extra_hidden($field)) {
unless ( $c->get_param($param_prefix . $field->{code}) ) {
$c->stash->{field_errors}->{ 'x' . $field->{code} } = _('This information is required');
}
@@ -1520,9 +1527,56 @@ sub generate_map : Private {
sub check_for_category : Private {
my ( $self, $c ) = @_;
- $c->stash->{category} = $c->get_param('category') || $c->stash->{report}->category;
+ my $category = $c->get_param('category') || $c->stash->{report}->category || '';
+ $category = '' if $category eq _('Loading...') || $category eq _('-- Pick a category --');
+ $c->stash->{category} = $category;
- return 1;
+ # Bit of a copy of set_report_extras, because we need the results here, but
+ # don't want to run all of that fn until later as it e.g. alters field
+ # errors at that point. Also, the report might already have some answers in
+ # too if e.g. gone via social login... TODO Improve this?
+ my $extra = $c->stash->{report}->get_extra_fields;
+ my %current = map { $_->{name} => $_ } @$extra;
+
+ my @contacts = grep { $_->category eq $category } @{$c->stash->{contacts}};
+ my @metalist = map { @{$_->get_metadata_for_storage} } @contacts;
+ my @extra;
+ foreach my $field (@metalist) {
+ push @extra, {
+ name => $field->{code},
+ description => $field->{description},
+ value => $c->get_param($field->{code}) || $current{$field->{code}}{value} || '',
+ };
+ }
+ $c->stash->{report}->set_extra_fields( @extra );
+
+ # Work out if the selected category (or category extra question answer) should lead
+ # to a message being shown not to use the form
+ if ( $c->stash->{category_extras}->{$category} && @{ $c->stash->{category_extras}->{$category} } >= 1 ) {
+ my $disable_form_messages = $c->forward('disable_form_message');
+ if ($disable_form_messages->{all}) {
+ $c->stash->{disable_form_message} = $disable_form_messages->{all};
+ } elsif (my $code = $disable_form_messages->{code}) {
+ my $answer = $c->get_param($code);
+ my $message = $disable_form_messages->{message};
+ if ($answer) {
+ foreach (@{$disable_form_messages->{answers}}) {
+ if ($answer eq $_) {
+ $c->stash->{disable_form_message} = $message;
+ }
+ }
+ } else {
+ $c->stash->{have_disable_qn_to_answer} = 1;
+ }
+ }
+ }
+
+ if ($c->get_param('submit_category_part_only') || $c->stash->{disable_form_message}) {
+ # If we've clicked the first-part category button (no-JS only probably),
+ # or the category submitted will be showing a disabled form message,
+ # we only want to reshow the form
+ $c->stash->{force_form_not_submitted} = 1;
+ }
}
=head2 redirect_or_confirm_creation
diff --git a/perllib/FixMyStreet/Cobrand/Bexley.pm b/perllib/FixMyStreet/Cobrand/Bexley.pm
index 26470617a..a395543bd 100644
--- a/perllib/FixMyStreet/Cobrand/Bexley.pm
+++ b/perllib/FixMyStreet/Cobrand/Bexley.pm
@@ -9,6 +9,7 @@ sub council_area { 'Bexley' }
sub council_name { 'London Borough of Bexley' }
sub council_url { 'bexley' }
sub get_geocoder { 'OSM' }
+sub map_type { 'OSM' }
sub disambiguate_location {
my $self = shift;
diff --git a/perllib/FixMyStreet/DB/Result/Problem.pm b/perllib/FixMyStreet/DB/Result/Problem.pm
index 09c6cb06d..8159d7251 100644
--- a/perllib/FixMyStreet/DB/Result/Problem.pm
+++ b/perllib/FixMyStreet/DB/Result/Problem.pm
@@ -376,13 +376,6 @@ sub check_for_errors {
$errors{name} = _('Please enter your name');
}
- if ( $self->category
- && $self->category eq _('-- Pick a category --') )
- {
- $errors{category} = _('Please choose a category');
- $self->category(undef);
- }
-
return \%errors;
}
diff --git a/t/app/controller/report_new_open311.t b/t/app/controller/report_new_open311.t
index b52e0af18..52f1ddc6e 100644
--- a/t/app/controller/report_new_open311.t
+++ b/t/app/controller/report_new_open311.t
@@ -62,6 +62,12 @@ my $contact4 = $mech->create_contact_ok(
{ description => 'Asset ID', code => 'central_asset_id', required => 'true', automated => 'hidden_field', variable => 'true', order => '2' },
] },
);
+# Another one to switch to in disable form test
+$mech->create_contact_ok(
+ body_id => $body2->id, # Edinburgh
+ category => 'Something Other',
+ email => '104',
+);
# test that the various bit of form get filled in and errors correctly
# generated.
@@ -310,6 +316,47 @@ subtest "Category extras includes form disabling string" => sub {
answers => [ 'yes' ],
};
}
+
+ # Test new non-JS form disabling flow
+ $mech->get_ok('/report/new?latitude=55.952055&longitude=-3.189579');
+ $mech->content_contains('name="submit_category_part_only"');
+ $mech->submit_form_ok({ with_fields => { category => 'Pothole' } });
+ $mech->content_contains('<div id="js-category-stopper" class="box-warning" role="alert" aria-live="assertive">');
+ $mech->content_contains('Please ring us!');
+ # Switch to another, okay, category
+ $mech->submit_form_ok({ with_fields => { category => 'Something Other' } });
+ $mech->content_lacks('<div id="js-category-stopper" class="box-warning" role="alert" aria-live="assertive">');
+ $mech->content_lacks('Please ring us!');
+
+ # Remove the required extra field so its error checking doesn't get in the way
+ my $extra = $contact4->get_extra_fields;
+ @$extra = grep { $_->{code} ne 'size' } @$extra;
+ $contact4->set_extra_fields(@$extra);
+ $contact4->update;
+
+ # Test submission of whole form, switching back to a blocked category at the same time
+ $mech->submit_form_ok({ with_fields => {
+ category => 'Pothole', title => 'Title', detail => 'Detail',
+ username => 'testing@example.org', name => 'Testing Example',
+ } });
+ $mech->content_contains('<div id="js-category-stopper" class="box-warning" role="alert" aria-live="assertive">');
+ $mech->content_contains('Please ring us!');
+
+ # Test special answer disabling of form
+ $extra = $contact4->get_extra_fields;
+ @$extra = grep { $_->{code} ne 'ring' } @$extra; # Remove that all-category one
+ $contact4->set_extra_fields(@$extra);
+ $contact4->update;
+ $mech->get_ok('/report/new?latitude=55.952055&longitude=-3.189579');
+ $mech->content_contains('name="submit_category_part_only"');
+ $mech->submit_form_ok({ with_fields => { category => 'Pothole' } });
+ $mech->content_contains('name="submit_category_part_only"');
+ $mech->submit_form_ok({ with_fields => { dangerous => 'no' } });
+ $mech->content_lacks('<div id="js-category-stopper" class="box-warning" role="alert" aria-live="assertive">');
+ $mech->content_lacks('Please please ring');
+ $mech->submit_form_ok({ with_fields => { dangerous => 'yes' } });
+ $mech->content_contains('<div id="js-category-stopper" class="box-warning" role="alert" aria-live="assertive">');
+ $mech->content_contains('Please please ring');
};
};
diff --git a/t/app/model/problem.t b/t/app/model/problem.t
index 503fa9276..e973febc1 100644
--- a/t/app/model/problem.t
+++ b/t/app/model/problem.t
@@ -106,15 +106,6 @@ for my $test (
}
},
{
- desc => 'bad category',
- changed => {
- category => '-- Pick a category --',
- },
- errors => {
- category => 'Please choose a category',
- }
- },
- {
desc => 'correct category',
changed => {
category => 'Horse!',
diff --git a/templates/web/base/report/form/user_loggedout_by_email.html b/templates/web/base/report/form/user_loggedout_by_email.html
index 4ae3db868..33526cc46 100644
--- a/templates/web/base/report/form/user_loggedout_by_email.html
+++ b/templates/web/base/report/form/user_loggedout_by_email.html
@@ -25,11 +25,7 @@
</div>
[% END %]
- [% IF c.cobrand.social_auth_enabled AND NOT email_required %]
- [% PROCESS 'report/form/user_loggedout_email.html' name='username_register' required=0 %]
- [% ELSE %]
- [% PROCESS 'report/form/user_loggedout_email.html' name='username_register' required=1 %]
- [% END %]
+ [% PROCESS 'report/form/user_loggedout_email.html' name='username_register' %]
[% IF type != 'update' AND c.config.SMS_AUTHENTICATION %]
[% UNLESS c.cobrand.call_hook('disable_phone_number_entry') %]
diff --git a/templates/web/base/report/form/user_loggedout_email.html b/templates/web/base/report/form/user_loggedout_email.html
index c32691eb4..9f631987b 100644
--- a/templates/web/base/report/form/user_loggedout_email.html
+++ b/templates/web/base/report/form/user_loggedout_email.html
@@ -15,6 +15,5 @@
[% END %]
<input type="[% username_type %]" name="username" id="form_[% name %]"
value="[% username_value | html %]"
- [% IF required %]required[% END %]
class="form-control required">
<!-- /user_loggedout_email.html -->
diff --git a/templates/web/base/report/form/user_loggedout_password.html b/templates/web/base/report/form/user_loggedout_password.html
index 02cfc9525..40a028b24 100644
--- a/templates/web/base/report/form/user_loggedout_password.html
+++ b/templates/web/base/report/form/user_loggedout_password.html
@@ -8,11 +8,7 @@
<a class="js-new-report-hide-sign-in" href="#">[% loc('Fill in your details manually.') %]</a>
</p>
- [% IF c.cobrand.social_auth_enabled %]
- [% PROCESS 'report/form/user_loggedout_email.html' name='username_sign_in' required=0 %]
- [% ELSE %]
- [% PROCESS 'report/form/user_loggedout_email.html' name='username_sign_in' required=1 %]
- [% END %]
+ [% PROCESS 'report/form/user_loggedout_email.html' name='username_sign_in' %]
<label for="password_sign_in">[% loc('Your password') %]</label>
[% IF field_errors.password %]
diff --git a/templates/web/base/report/new/category_extras_fields.html b/templates/web/base/report/new/category_extras_fields.html
index dd5c3911d..e9237f83b 100644
--- a/templates/web/base/report/new/category_extras_fields.html
+++ b/templates/web/base/report/new/category_extras_fields.html
@@ -1,6 +1,6 @@
[%- FOR meta IN metas %]
[%- meta_name = meta.code -%]
- [%- x_meta_name = 'x' _ meta.code # For report_meta and field_erros lookup, as TT hides codes starting "_" -%]
+ [%- x_meta_name = 'x' _ meta.code # For report_meta and field_errors lookup, as TT hides codes starting "_" -%]
[% IF c.cobrand.category_extra_hidden(meta) AND NOT show_hidden %]
diff --git a/templates/web/base/report/new/category_wrapper.html b/templates/web/base/report/new/category_wrapper.html
index 6cbb55229..32785b450 100644
--- a/templates/web/base/report/new/category_wrapper.html
+++ b/templates/web/base/report/new/category_wrapper.html
@@ -19,6 +19,11 @@
[% PROCESS "report/new/duplicate_suggestions.html" %]
+[% IF disable_form_message %]
+<div id="js-category-stopper" class="box-warning" role="alert" aria-live="assertive">
+ [% disable_form_message %]
+</div>
+[% ELSE %]
<div id="js-post-category-messages" class="js-hide-if-invalid-category_extras">
[%# This section includes 'Pick an asset' text, roadworks info, extra category questions %]
@@ -26,3 +31,4 @@
[% PROCESS "report/new/category_extras.html" %]
[%- END %]
</div>
+[% END %]
diff --git a/templates/web/base/report/new/form_report.html b/templates/web/base/report/new/form_report.html
index e5facc305..52133ba68 100644
--- a/templates/web/base/report/new/form_report.html
+++ b/templates/web/base/report/new/form_report.html
@@ -1,3 +1,5 @@
+[% SET form_show_category_only = NOT category || field_errors.category || disable_form_message || have_disable_qn_to_answer %]
+
<!-- report/new/form_report.html -->
[% INCLUDE 'report/new/form_heading.html' %]
@@ -7,7 +9,17 @@
[% PROCESS "report/new/category_wrapper.html" %]
[% TRY %][% PROCESS 'report/new/after_category.html' %][% CATCH file %][% END %]
-<div class="js-hide-if-invalid-category">
+
+[% IF form_show_category_only %]
+ <div class="hidden-js">
+ <input class="btn btn--primary btn--block btn--final" type="submit" name="submit_category_part_only" value="[% loc('Submit') %]">
+ </div>
+ [% SET field_required = '' %]
+[% ELSE %]
+ [% SET field_required = ' required' %]
+[% END %]
+
+<div class="js-hide-if-invalid-category[% ' hidden-nojs' IF form_show_category_only %]">
[% TRY %][% PROCESS 'report/new/_form_labels.html' %][% CATCH file %][% END %]
<h2 class="form-section-heading js-hide-if-private-category">[% loc( 'Public details' ) %]</h2>
@@ -67,7 +79,7 @@
<p class='form-error'>[% field_errors.detail %]</p>
[% END %]
- <textarea class="form-control" rows="7" cols="26" name="detail" id="form_detail" [% IF form_detail_placeholder %]aria-describedby="detail-hint"[% END %] required>[% report.detail | html %]</textarea>
+ <textarea class="form-control" rows="7" cols="26" name="detail" id="form_detail" [% IF form_detail_placeholder %]aria-describedby="detail-hint"[% END %][% field_required %]>[% report.detail | html %]</textarea>
[% TRY %][% PROCESS 'report/new/inline-tips.html' %][% CATCH file %][% END %]
diff --git a/templates/web/base/report/new/form_title.html b/templates/web/base/report/new/form_title.html
index a20d836ac..423a0cf0e 100644
--- a/templates/web/base/report/new/form_title.html
+++ b/templates/web/base/report/new/form_title.html
@@ -5,4 +5,4 @@
[% IF field_errors.title %]
<p class='form-error'>[% field_errors.title %]</p>
[% END %]
-<input class="form-control" type="text" value="[% report.title | html %]" name="title" id="form_title" aria-describedby="title-hint" required autocomplete="off">
+<input class="form-control" type="text" value="[% report.title | html %]" name="title" id="form_title" aria-describedby="title-hint"[% field_required %] autocomplete="off">
diff --git a/templates/web/base/report/new/form_user.html b/templates/web/base/report/new/form_user.html
index 49ef70abd..73e1b5d33 100644
--- a/templates/web/base/report/new/form_user.html
+++ b/templates/web/base/report/new/form_user.html
@@ -1,5 +1,5 @@
<!-- report/new/form_user.html -->
-<div class="js-hide-if-invalid-category">
+<div class="js-hide-if-invalid-category[% ' hidden-nojs' IF form_show_category_only %]">
[% PROCESS 'report/form/user.html' type='report' %]
diff --git a/templates/web/bristol/footer_extra_js.html b/templates/web/bristol/footer_extra_js.html
index deff4e395..644576b72 100644
--- a/templates/web/bristol/footer_extra_js.html
+++ b/templates/web/bristol/footer_extra_js.html
@@ -6,6 +6,8 @@ IF bodyclass.match('mappage');
scripts.push(
version('/vendor/OpenLayers.Projection.OrdnanceSurvey.js'),
version('/cobrands/fixmystreet/assets.js'),
+ version('/cobrands/fixmystreet-uk-councils/roadworks.js'),
+ version('/cobrands/bristol/js.js'),
version('/cobrands/bristol/assets.js'),
version('/cobrands/highways/assets.js'),
);
diff --git a/templates/web/bromley/report/form/user_loggedout_email.html b/templates/web/bromley/report/form/user_loggedout_email.html
index 78b4a0044..8aad16289 100644
--- a/templates/web/bromley/report/form/user_loggedout_email.html
+++ b/templates/web/bromley/report/form/user_loggedout_email.html
@@ -18,5 +18,4 @@
[% END %]
<input type="[% username_type %]" name="username" id="form_[% name %]"
value="[% username_value | html %]"
- [% IF required %]required[% END %]
class="form-control required">
diff --git a/templates/web/northamptonshire/report/new/roads_message.html b/templates/web/northamptonshire/report/new/roads_message.html
index 06244b36e..0394a9c5c 100644
--- a/templates/web/northamptonshire/report/new/roads_message.html
+++ b/templates/web/northamptonshire/report/new/roads_message.html
@@ -3,7 +3,8 @@
<p>Please select <span class="js-roads-asset" data-original="an item">an item</span> from the map on which to make a report.</p>
</div>
<div id="js-not-a-road" class="hidden js-responsibility-message">
- <p>The location you have selected doesn't appear to be on <span class="js-roads-asset" data-original="a road">a road</span>.</p>
- <p>Please select <span class="js-roads-asset" data-original="a road">a road</span> on which to make a report.</p>
+ <p>This area is not under the responsibility of Northamptonshire
+ County Council and therefore we are unable to accept reports in
+ this area / street.</p>
</div>
</div>
diff --git a/web/cobrands/bexley/js.js b/web/cobrands/bexley/js.js
index d0f2e8963..e0d87d66d 100644
--- a/web/cobrands/bexley/js.js
+++ b/web/cobrands/bexley/js.js
@@ -62,20 +62,23 @@ var labeled_defaults = $.extend(true, {}, defaults, {
}
});
-fixmystreet.assets.add(defaults, {
+var road_defaults = $.extend(true, {}, defaults, {
+ stylemap: fixmystreet.assets.stylemap_invisible,
+ always_visible: true,
+ non_interactive: true
+});
+
+fixmystreet.assets.add(road_defaults, {
http_options: {
params: {
TYPENAME: "Streets",
}
},
- always_visible: true,
- non_interactive: true,
nearest_radius: 100,
usrn: {
attribute: 'NSG_REF',
field: 'NSGRef'
- },
- stylemap: fixmystreet.assets.stylemap_invisible
+ }
});
fixmystreet.assets.add(labeled_defaults, {
@@ -111,5 +114,31 @@ fixmystreet.assets.add(defaults, {
asset_item: 'public toilet'
});
+fixmystreet.assets.add(road_defaults, {
+ http_options: {
+ url: "https://tilma.mysociety.org/mapserver/tfl",
+ params: {
+ TYPENAME: "RedRoutes"
+ }
+ },
+ road: true,
+ all_categories: true,
+ actions: {
+ found: function(layer, feature) {
+ var category = $('select#form_category').val(),
+ relevant = (category !== 'Street cleaning');
+ if (!fixmystreet.assets.selectedFeature() && relevant) {
+ fixmystreet.body_overrides.only_send('TfL');
+ $('#category_meta').empty();
+ } else {
+ fixmystreet.body_overrides.remove_only_send();
+ }
+ },
+ not_found: function(layer) {
+ fixmystreet.body_overrides.remove_only_send();
+ }
+ }
+});
+
})();
diff --git a/web/cobrands/bristol/js.js b/web/cobrands/bristol/js.js
new file mode 100644
index 000000000..c2431607f
--- /dev/null
+++ b/web/cobrands/bristol/js.js
@@ -0,0 +1,24 @@
+(function(){
+
+if (!fixmystreet.maps) {
+ return;
+}
+
+var org_id = '1015';
+var body = "Bristol City Council";
+fixmystreet.assets.add(fixmystreet.roadworks.layer_future, {
+ http_options: { params: { organisation_id: org_id } },
+ body: body
+});
+fixmystreet.assets.add(fixmystreet.roadworks.layer_planned, {
+ http_options: { params: { organisation_id: org_id } },
+ body: body
+});
+
+fixmystreet.roadworks.config = {
+ summary_heading_text: 'Location',
+ extra_dates_text: '<small>Please note that dates are updated by the contractor carrying out the works and the finish date may be incorrect in cases of unauthorised or overrunning works</small>',
+ skip_delays: true
+};
+
+})();
diff --git a/web/cobrands/fixmystreet-uk-councils/roadworks.js b/web/cobrands/fixmystreet-uk-councils/roadworks.js
index 083f669c8..f4da4c310 100644
--- a/web/cobrands/fixmystreet-uk-councils/roadworks.js
+++ b/web/cobrands/fixmystreet-uk-councils/roadworks.js
@@ -186,33 +186,38 @@ fixmystreet.roadworks.display_message = function(feature) {
desc = attr.works_desc.replace(/\\n/g, '\n');
var config = this.config,
+ summary_heading_text = config.summary_heading_text || 'Summary',
tag_top = config.tag_top || 'p',
colon = config.colon ? ':' : '';
- var $msg = $('<div class="js-roadworks-message js-roadworks-message-' + feature.layer.id + ' box-warning"><' + tag_top + '>Roadworks are scheduled near this location, so you may not need to report your issue.</' + tag_top + '></div>');
- var $dl = $("<dl></dl>").appendTo($msg);
- $dl.append("<dt>Dates" + colon + "</dt>");
- $dl.append($("<dd></dd>").text(start + " until " + end));
- $dl.append("<dt>Summary" + colon + "</dt>");
- var $summary = $("<dd></dd>").appendTo($dl);
- tooltip.split("\n").forEach(function(para) {
- if (para.match(/^(\d{2}\s+\w{3}\s+(\d{2}:\d{2}\s+)?\d{4}( - )?){2}/)) {
- // skip showing the date again
- return;
- }
- if (config.skip_delays && para.match(/^delays/)) {
- // skip showing traffic delay information
- return;
- }
- $summary.append(para).append("<br />");
- });
- if (desc) {
- $dl.append("<dt>Description" + colon + "</dt>");
- $dl.append($("<dd></dd>").text(desc));
+ var $msg = $('<div class="js-roadworks-message js-roadworks-message-' + feature.layer.id + ' box-warning"><' + tag_top + '>Roadworks are scheduled near this location, so you may not need to report your issue.</' + tag_top + '></div>');
+ var $dl = $("<dl></dl>").appendTo($msg);
+ $dl.append("<dt>Dates" + colon + "</dt>");
+ var $dates = $("<dd></dd>").appendTo($dl);
+ $dates.text(start + " until " + end);
+ if (config.extra_dates_text) {
+ $dates.append('<br>' + config.extra_dates_text);
+ }
+ $dl.append("<dt>" + summary_heading_text + colon + "</dt>");
+ var $summary = $("<dd></dd>").appendTo($dl);
+ tooltip.split("\n").forEach(function(para) {
+ if (para.match(/^(\d{2}\s+\w{3}\s+(\d{2}:\d{2}\s+)?\d{4}( - )?){2}/)) {
+ // skip showing the date again
+ return;
}
- if (config.text_after) {
- $dl.append(config.text_after);
+ if (config.skip_delays && para.match(/^delays/)) {
+ // skip showing traffic delay information
+ return;
}
+ $summary.append(para).append("<br />");
+ });
+ if (desc) {
+ $dl.append("<dt>Description" + colon + "</dt>");
+ $dl.append($("<dd></dd>").text(desc));
+ }
+ if (config.text_after) {
+ $dl.append(config.text_after);
+ }
$msg.prependTo('#js-post-category-messages');
};
diff --git a/web/cobrands/fixmystreet/assets.js b/web/cobrands/fixmystreet/assets.js
index 5a25cc128..c30fa2b5e 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,
@@ -866,6 +867,19 @@ $(function() {
fixmystreet.assets.init();
});
+OpenLayers.Geometry.MultiPolygon.prototype.containsPoint = function(point) {
+ var numPolygons = this.components.length;
+ var contained = false;
+ for(var i=0; i<numPolygons; ++i) {
+ polygon = this.components[i].containsPoint(point);
+ if (polygon) {
+ contained = polygon;
+ break;
+ }
+ }
+ return contained;
+};
+
OpenLayers.Layer.Vector.prototype.getFeatureAtPoint = function(point) {
for (var i = 0; i < this.features.length; i++) {
var feature = this.features[i];
@@ -1088,18 +1102,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 +1137,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 +1163,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 +1231,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();
}
}
});