aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Somerville <matthew@mysociety.org>2019-08-29 22:36:28 +0100
committerMatthew Somerville <matthew@mysociety.org>2019-08-29 22:36:28 +0100
commitbe0da54c728359938cfe003107921a8e5e73036e (patch)
treeec53453033e1d62452901cba17f617c5dd684d23
parentb2729d3233f373b6f7bbff7c16eaae838a581a5f (diff)
parent7a8dcd6b60877c37df6961abf6743981966dc30c (diff)
Merge branch 'issues/1515-disable-form-flag'
-rw-r--r--CHANGELOG.md1
-rwxr-xr-xbin/fixmystreet.com/fixture1
-rw-r--r--bin/fixmystreet.com/one-off-move-js-messages-to-db128
-rw-r--r--perllib/FixMyStreet/App/Controller/Admin.pm4
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm26
-rw-r--r--t/app/controller/admin/reportextrafields.t7
-rw-r--r--t/app/controller/report_new_open311.t26
-rw-r--r--templates/web/base/admin/extra-metadata-form.html12
-rw-r--r--templates/web/fixmystreet.com/footer_extra_js.html1
-rw-r--r--templates/web/oxfordshire/footer_extra_js.html1
-rw-r--r--web/cobrands/bexley/js.js23
-rw-r--r--web/cobrands/bristol/assets.js17
-rw-r--r--web/cobrands/buckinghamshire/assets.js6
-rw-r--r--web/cobrands/fixmystreet/admin.js1
-rw-r--r--web/cobrands/fixmystreet/assets.js34
-rw-r--r--web/cobrands/fixmystreet/fixmystreet.js26
-rw-r--r--web/cobrands/northamptonshire/assets.js17
-rw-r--r--web/cobrands/oxfordshire/assets.js5
18 files changed, 256 insertions, 80 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 295dd04ae..ce0db9630 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,7 @@
- Admin improvements:
- Add new roles system, to group permissions and apply to users. #2483
- Contact form emails now include user admin links.
+ - Allow categories/Open311 questions to disable the reporting form. #2599
- New features:
- Categories can be listed under more than one group #2475
- OpenID Connect login support. #2523
diff --git a/bin/fixmystreet.com/fixture b/bin/fixmystreet.com/fixture
index f4f33e679..760c76414 100755
--- a/bin/fixmystreet.com/fixture
+++ b/bin/fixmystreet.com/fixture
@@ -115,6 +115,7 @@ if ($opt->test_fixtures) {
description => 'Please call us instead, it is very urgent.',
order => 1,
variable => 'false',
+ disable_form => 'true',
});
$child_cat->update;
diff --git a/bin/fixmystreet.com/one-off-move-js-messages-to-db b/bin/fixmystreet.com/one-off-move-js-messages-to-db
new file mode 100644
index 000000000..1f03a56e2
--- /dev/null
+++ b/bin/fixmystreet.com/one-off-move-js-messages-to-db
@@ -0,0 +1,128 @@
+#!/usr/bin/env perl
+#
+# One off script to transfer the hardcoded JS messages to the database
+
+use strict;
+use warnings;
+use v5.14;
+
+BEGIN {
+ use File::Basename qw(dirname);
+ use File::Spec;
+ my $d = dirname(File::Spec->rel2abs($0));
+ require "$d/../../setenv.pl";
+}
+
+use FixMyStreet::DB;
+
+use Getopt::Long;
+
+my $commit;
+GetOptions(
+ 'commit' => \$commit,
+);
+
+if (!$commit) {
+ say "*** DRY RUN ***";
+}
+
+my @messages = (
+ {
+ body => 'Oxfordshire County Council',
+ category => 'Countryside Paths / Public Rights of Way (usually not tarmac)',
+ message => 'Please report problems with rights of way using <a href="https://publicrightsofway.oxfordshire.gov.uk/web/standardmap.aspx">this page</a>.'
+ },
+ {
+ body => 'Buckinghamshire County Council',
+ category => 'Rights of Way',
+ message => 'If you wish to report an issue on a Public Right of Way, please use <a href="https://www.buckscc.gov.uk/services/environment/public-rights-of-way/report-a-rights-of-way-issue/">this service</a>.'
+ },
+ {
+ body => 'Northamptonshire County Council',
+ category => 'Street lighting',
+ message => 'Street lighting in Northamptonshire is maintained by Balfour Beatty on behalf of the County Council under a Street Lighting Private Finance Initiative (PFI) contract. Please view our <b><a href="https://www3.northamptonshire.gov.uk/councilservices/northamptonshire-highways/roads-and-streets/Pages/street-lighting.aspx">Street Lighting</a></b> page to report any issues.'
+ },
+);
+
+my %bristol = (
+ "Abandoned vehicles" => "https://www.bristol.gov.uk/streets-travel/abandoned-vehicles",
+ "Flytipping" => "https://www.bristol.gov.uk/streets-travel/flytipping",
+ "Flyposting" => "https://www.bristol.gov.uk/streets-travel/flyposting",
+ "Graffiti" => "https://www.bristol.gov.uk/streets-travel/graffiti",
+ "Dog fouling" => "https://www.bristol.gov.uk/streets-travel/dog-fouling",
+ "Street cleaning" => "https://www.bristol.gov.uk/streets-travel/street-that-needs-cleaning",
+);
+foreach (keys %bristol) {
+ push @messages, {
+ body => 'Bristol City Council',
+ category => $_,
+ message => "If you wish to report an issue with $_, please use <a href=\"$bristol{$_}\">this service</a>."
+ };
+}
+
+MESSAGE: foreach my $msg (@messages) {
+ my $body = FixMyStreet::DB->resultset("Body")->find({ name => $msg->{body} });
+ unless ($body) {
+ say STDERR "Could not find body $msg->{body}";
+ next;
+ }
+ my $category = FixMyStreet::DB->resultset("Contact")->find({ body_id => $body->id, category => $msg->{category} });
+ unless ($category) {
+ say STDERR "Could not find $msg->{category}, $msg->{body}";
+ next;
+ }
+ my $extra_fields = $category->get_extra_fields;
+ foreach (@$extra_fields) {
+ if ($_->{code} eq 'stopper-message') {
+ say "Stopper message already present for $msg->{category}, $msg->{body}";
+ next MESSAGE;
+ }
+ }
+ unshift @$extra_fields, {
+ code => 'stopper-message',
+ order => -1,
+ datatype => 'string',
+ required => 'true',
+ protected => 'true',
+ variable => 'false',
+ disable_form => 'true',
+ description => $msg->{message},
+ datatype_description => '',
+ };
+ $category->set_extra_fields(@$extra_fields);
+ say "Adding stopper message to $msg->{category}, $msg->{body}";
+ if ($commit) {
+ $category->update;
+ }
+}
+
+my $northants = FixMyStreet::DB->resultset("Body")->find({ name => 'Northamptonshire County Council' });
+if ($northants) {
+ my @northants_contacts = $northants->contacts->all;
+ my $found_total = 0;
+ foreach my $category (@northants_contacts) {
+ my $extra_fields = $category->get_extra_fields;
+ my $found = 0;
+ foreach (@$extra_fields) {
+ next unless $_->{code} eq 'emergency';
+ $found_total++;
+ if (!$_->{disable_form} || $_->{disable_form} eq 'false') {
+ $_->{disable_form} = 'true';
+ $_->{protected} = 'true';
+ $found = 1;
+ }
+ }
+ if ($found) {
+ $category->set_extra_fields(@$extra_fields);
+ say "Making emergency message disable form on " . $category->category . ", Northamptonshire";
+ if ($commit) {
+ $category->update;
+ }
+ }
+ }
+ if (!$found_total) {
+ say STDERR "No emergency messages found for Northamptonshire";
+ }
+} else {
+ say STDERR "Could not find Northamptonshire";
+}
diff --git a/perllib/FixMyStreet/App/Controller/Admin.pm b/perllib/FixMyStreet/App/Controller/Admin.pm
index 45ac1534d..5373220a7 100644
--- a/perllib/FixMyStreet/App/Controller/Admin.pm
+++ b/perllib/FixMyStreet/App/Controller/Admin.pm
@@ -1192,6 +1192,8 @@ sub update_extra_fields : Private {
$meta->{variable} = $notice ? 'false' : 'true';
my $protected = $c->get_param("metadata[$i].protected") && $c->get_param("metadata[$i].protected") eq 'on';
$meta->{protected} = $protected ? 'true' : 'false';
+ my $disable_form = $c->get_param("metadata[$i].disable_form") && $c->get_param("metadata[$i].disable_form") eq 'on';
+ $meta->{disable_form} = $disable_form ? 'true' : 'false';
$meta->{description} = $c->get_param("metadata[$i].description");
$meta->{datatype_description} = $c->get_param("metadata[$i].datatype_description");
$meta->{automated} = $c->get_param("metadata[$i].automated")
@@ -1205,9 +1207,11 @@ sub update_extra_fields : Private {
foreach my $j (@vindices) {
my $name = $c->get_param("metadata[$i].values[$j].name");
my $key = $c->get_param("metadata[$i].values[$j].key");
+ my $disable = $c->get_param("metadata[$i].values[$j].disable");
push(@{$meta->{values}}, {
name => $name,
key => $key,
+ $disable ? (disable => 1) : (),
}) if $name;
}
}
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm
index 8f1f08d2e..c41b65e2a 100644
--- a/perllib/FixMyStreet/App/Controller/Report/New.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/New.pm
@@ -281,6 +281,11 @@ sub by_category_ajax_data : Private {
$body->{category_extra_json} = $c->forward('generate_category_extra_json');
}
+ if ( $c->stash->{category_extras}->{$category} && @{ $c->stash->{category_extras}->{$category} } >= 1 ) {
+ my $disable_form = $c->forward('disable_form_message');
+ $body->{disable_form} = $disable_form if $disable_form;
+ }
+
my $unresponsive = $c->stash->{unresponsive}->{$category};
$unresponsive ||= $c->stash->{unresponsive}->{ALL} || '' if $type eq 'one';
@@ -303,6 +308,27 @@ sub by_category_ajax_data : Private {
return $body;
}
+sub disable_form_message : Private {
+ my ( $self, $c ) = @_;
+
+ my %out;
+ foreach (@{$c->stash->{category_extras}->{$c->stash->{category}}}) {
+ if ($_->{disable_form} && $_->{disable_form} eq 'true') {
+ $out{all} .= ' ' if $out{all};
+ $out{all} .= $_->{description};
+ } elsif (($_->{variable} || '') eq 'true' && @{$_->{values} || []}) {
+ foreach my $opt (@{$_->{values}}) {
+ if ($opt->{disable}) {
+ $out{message} = $_->{datatype_description};
+ $out{code} = $_->{code};
+ push @{$out{answers}}, $opt->{key};
+ }
+ }
+ }
+ }
+ return \%out;
+}
+
=head2 report_import
Action to accept report creations from iPhones and other mobile apps. URL is
diff --git a/t/app/controller/admin/reportextrafields.t b/t/app/controller/admin/reportextrafields.t
index 6011b13e3..070e3e2fc 100644
--- a/t/app/controller/admin/reportextrafields.t
+++ b/t/app/controller/admin/reportextrafields.t
@@ -82,6 +82,7 @@ FixMyStreet::override_config {
description => "this is a test description",
datatype_description => "hint here",
datatype => "string",
+ disable_form => "false",
};
$contact->discard_changes;
is_deeply $contact->get_extra_fields, $contact_extra_fields, 'new string field was added';
@@ -93,6 +94,7 @@ FixMyStreet::override_config {
"metadata[1].code" => "list_test",
"metadata[1].required" => undef,
"metadata[1].notice" => "",
+ "metadata[1].disable_form" => "on",
"metadata[1].description" => "this field is a list",
"metadata[1].datatype_description" => "",
"metadata[1].datatype" => "list",
@@ -108,6 +110,7 @@ FixMyStreet::override_config {
required => "false",
variable => "true",
protected => "false",
+ disable_form => "true",
description => "this field is a list",
datatype_description => "",
datatype => "singlevaluelist",
@@ -145,6 +148,7 @@ FixMyStreet::override_config {
required => 'false',
variable => 'true',
protected => 'false',
+ disable_form => 'false',
code => 'POT',
automated => 'server_set'
} ], "automated fields not unset";
@@ -181,6 +185,7 @@ FixMyStreet::override_config {
required => "true",
variable => "true",
protected => "false",
+ disable_form => "false",
description => "this is a test description",
datatype_description => "hint here",
datatype => "string",
@@ -209,6 +214,7 @@ FixMyStreet::override_config {
required => "false",
variable => "true",
protected => "false",
+ disable_form => "false",
description => "this field is a list",
datatype_description => "",
datatype => "singlevaluelist",
@@ -239,6 +245,7 @@ FixMyStreet::override_config {
required => "false",
variable => "true",
protected => "false",
+ disable_form => "false",
description => "",
datatype_description => "",
datatype => "string",
diff --git a/t/app/controller/report_new_open311.t b/t/app/controller/report_new_open311.t
index 3b733622b..b52e0af18 100644
--- a/t/app/controller/report_new_open311.t
+++ b/t/app/controller/report_new_open311.t
@@ -287,4 +287,30 @@ subtest "Category extras includes description label for user" => sub {
};
};
+subtest "Category extras includes form disabling string" => sub {
+ FixMyStreet::override_config {
+ ALLOWED_COBRANDS => 'fixmystreet',
+ MAPIT_URL => 'http://mapit.uk/',
+ }, sub {
+ $contact4->push_extra_fields({ description => 'Please ring us!', code => 'ring', variable => 'false', order => '0', disable_form => 'true' });
+ $contact4->push_extra_fields({ datatype_description => 'Please please ring', description => 'Is it dangerous?', code => 'dangerous',
+ variable => 'true', order => '0', values => [ { name => 'Yes', key => 'yes', disable => 1 }, { name => 'No', key => 'no' } ]
+ });
+ $contact4->update;
+ for (
+ { url => '/report/new/ajax?' },
+ { url => '/report/new/category_extras?category=Pothole' },
+ ) {
+ my $json = $mech->get_ok_json($_->{url} . '&latitude=55.952055&longitude=-3.189579');
+ my $output = $json->{by_category} ? $json->{by_category}{Pothole}{disable_form} : $json->{disable_form};
+ is_deeply $output, {
+ all => 'Please ring us!',
+ message => 'Please please ring',
+ code => 'dangerous',
+ answers => [ 'yes' ],
+ };
+ }
+ };
+};
+
done_testing();
diff --git a/templates/web/base/admin/extra-metadata-form.html b/templates/web/base/admin/extra-metadata-form.html
index d621a7d79..b82eca966 100644
--- a/templates/web/base/admin/extra-metadata-form.html
+++ b/templates/web/base/admin/extra-metadata-form.html
@@ -43,6 +43,12 @@
<input name="metadata[[% loop.index %]].protected" data-field-name="protected" type=checkbox [% meta.protected == 'true' ? 'checked' : '' %]>
</label>
+ <div class="admin-hint"><p>[% loc('If ticked the entire report form will be disabled when this category is selected.') %]</p></div>
+ <label>
+ [% loc('Disable form') %]
+ <input name="metadata[[% loop.index %]].disable_form" data-field-name="disable_form" type=checkbox [% meta.disable_form == 'true' ? 'checked' : '' %]>
+ </label>
+
<div class="admin-hint"><p>[% loc('The field name as shown to the user on the report form.') %]</p></div>
<label>
[% loc('Description') %]
@@ -69,7 +75,7 @@
[% loc('Options') %]<span class="hidden-js"> [% loc('(ignored if type is "String")') %]</span>
<ul>
[% outer_loop = loop %]
- [% values = meta.values OR [] %]
+ [% SET values = meta.item('values') ? meta.values : [] %]
[% FOREACH option IN values.merge([{}]) %]
[%# the .merge() call is so there's an empty one on the end %]
<li class="js-metadata-option [% IF loop.last %]hidden-js js-metadata-option-template[% END %]">
@@ -81,6 +87,10 @@
[% loc('Name') %]
<input class="js-metadata-option-name" name="metadata[[% outer_loop.index %]].values[[% loop.index %]].name" type="text" value="[% option.name | html %]">
</label>
+ <label>
+ [% loc('Disable form') %]
+ <input class="js-metadata-option-disable" name="metadata[[% outer_loop.index %]].values[[% loop.index %]].disable" type="checkbox"[% ' checked' IF option.disable %]>
+ </label>
<button type="button" class="btn btn--small js-metadata-option-remove hidden-nojs">[% loc('Remove') %]</button>
</li>
[% END %]
diff --git a/templates/web/fixmystreet.com/footer_extra_js.html b/templates/web/fixmystreet.com/footer_extra_js.html
index f9122506b..3f3e61c52 100644
--- a/templates/web/fixmystreet.com/footer_extra_js.html
+++ b/templates/web/fixmystreet.com/footer_extra_js.html
@@ -12,7 +12,6 @@ IF bodyclass.match('mappage');
scripts.push( version('/cobrands/buckinghamshire/assets.js') );
scripts.push( version('/cobrands/lincolnshire/assets.js') );
scripts.push( version('/cobrands/northamptonshire/assets.js') );
- scripts.push( version('/cobrands/oxfordshire/assets.js') );
scripts.push( version('/cobrands/hounslow/assets.js') );
scripts.push( version('/cobrands/westminster/assets.js') );
scripts.push( version('/cobrands/highways/assets.js') );
diff --git a/templates/web/oxfordshire/footer_extra_js.html b/templates/web/oxfordshire/footer_extra_js.html
index 24ec8486a..1c48aa5cf 100644
--- a/templates/web/oxfordshire/footer_extra_js.html
+++ b/templates/web/oxfordshire/footer_extra_js.html
@@ -4,7 +4,6 @@ IF bodyclass.match('mappage');
version('/cobrands/fixmystreet/assets.js'),
version('/vendor/OpenLayers.Projection.OrdnanceSurvey.js'),
version('/cobrands/oxfordshire/js.js'),
- version('/cobrands/oxfordshire/assets.js'),
version('/cobrands/highways/assets.js'),
version('/cobrands/fixmystreet-uk-councils/council_validation_rules.js'),
);
diff --git a/web/cobrands/bexley/js.js b/web/cobrands/bexley/js.js
index f2ee820b2..d0f2e8963 100644
--- a/web/cobrands/bexley/js.js
+++ b/web/cobrands/bexley/js.js
@@ -111,28 +111,5 @@ fixmystreet.assets.add(defaults, {
asset_item: 'public toilet'
});
-// We need to trigger the below function on subcategory change also
-$(function(){
- $("#problem_form").on("change.category", "#form_DALocation", function() {
- $(fixmystreet).trigger('report_new:category_change');
- });
-});
-
-fixmystreet.message_controller.register_category({
- body: defaults.body,
- category: function() {
- var cat = $('#form_category').val();
- if (cat === 'Dead animal') {
- var where = $('#form_DALocation').val();
- if (where === 'Garden' || where === 'Other private property') {
- return true;
- }
- }
- return false;
- },
- keep_category_extras: true,
- message: 'Please follow the link below to pay to remove a dead animal from a private property.'
-});
-
})();
diff --git a/web/cobrands/bristol/assets.js b/web/cobrands/bristol/assets.js
index d770b45d6..01abb028c 100644
--- a/web/cobrands/bristol/assets.js
+++ b/web/cobrands/bristol/assets.js
@@ -80,21 +80,4 @@ fixmystreet.assets.add(options, {
filter_value: 'S180'
});
-var redirects = {
- "Abandoned vehicles": "https://www.bristol.gov.uk/streets-travel/abandoned-vehicles",
- "Flytipping": "https://www.bristol.gov.uk/streets-travel/flytipping",
- "Flyposting": "https://www.bristol.gov.uk/streets-travel/flyposting",
- "Graffiti": "https://www.bristol.gov.uk/streets-travel/graffiti",
- "Dog fouling": "https://www.bristol.gov.uk/streets-travel/dog-fouling",
- "Street cleaning": "https://www.bristol.gov.uk/streets-travel/street-that-needs-cleaning"
-};
-
-$.each(redirects, function(name, value) {
- fixmystreet.message_controller.register_category({
- body: options.body,
- category: name,
- message: 'If you wish to report an issue with ' + name + ', please use <a href="' + value + '">this service</a>.'
- });
-});
-
})();
diff --git a/web/cobrands/buckinghamshire/assets.js b/web/cobrands/buckinghamshire/assets.js
index fe54c32fe..1cf5b236c 100644
--- a/web/cobrands/buckinghamshire/assets.js
+++ b/web/cobrands/buckinghamshire/assets.js
@@ -371,10 +371,4 @@ fixmystreet.assets.add(defaults, {
}
});
-fixmystreet.message_controller.register_category({
- body: defaults.body,
- category: 'Rights of Way',
- message: 'If you wish to report an issue on a Public Right of Way, please use <a href="https://www.buckscc.gov.uk/services/environment/public-rights-of-way/report-a-rights-of-way-issue/">this service</a>.'
-});
-
})();
diff --git a/web/cobrands/fixmystreet/admin.js b/web/cobrands/fixmystreet/admin.js
index 25c7651eb..4ed9b1866 100644
--- a/web/cobrands/fixmystreet/admin.js
+++ b/web/cobrands/fixmystreet/admin.js
@@ -216,6 +216,7 @@ $(function(){
var prefix = "metadata["+item_index+"].values["+i+"]";
$li.find(".js-metadata-option-key").attr("name", prefix+".key");
$li.find(".js-metadata-option-name").attr("name", prefix+".name");
+ $li.find(".js-metadata-option-disable").attr("name", prefix+".disable");
});
}
});
diff --git a/web/cobrands/fixmystreet/assets.js b/web/cobrands/fixmystreet/assets.js
index a00adb055..87ceb142a 100644
--- a/web/cobrands/fixmystreet/assets.js
+++ b/web/cobrands/fixmystreet/assets.js
@@ -1015,7 +1015,8 @@ must be on a road, taking into account Highways England roads.
fixmystreet.message_controller = (function() {
var stopperId = 'js-category-stopper',
- stoppers = [];
+ stoppers = [],
+ ignored_bodies = [];
// This shows an error message because e.g. an asset isn't selected or a road hasn't been clicked
function show_responsibility_error(id, asset_item, asset_type) {
@@ -1107,19 +1108,24 @@ fixmystreet.message_controller = (function() {
var $id = $('#' + stopperId);
var body = $('#form_category').data('body');
var matching = $.grep(stoppers, function(stopper, i) {
- if (stopper.staff_ignore && body) {
+ if (OpenLayers.Util.indexOf(ignored_bodies, body) > -1) {
return false;
}
- var relevant_body = OpenLayers.Util.indexOf(fixmystreet.bodies, stopper.body) > -1;
- var relevant_cat;
- if (typeof stopper.category === 'function') {
- relevant_cat = stopper.category();
+ var category = $('#form_category').val();
+ if (category != stopper.category) {
+ return false;
+ }
+
+ if (stopper.answers) {
+ var answer = $('#form_' + stopper.code).val();
+ if (OpenLayers.Util.indexOf(stopper.answers, answer) > -1) {
+ return true;
+ }
+ return false;
} else {
- relevant_cat = $('#form_category').val() == stopper.category;
+ return true;
}
- var relevant = relevant_body && relevant_cat;
- return relevant;
});
if (!matching.length) {
@@ -1135,7 +1141,7 @@ fixmystreet.message_controller = (function() {
if (typeof stopper.message === 'function') {
$msg = stopper.message();
} else {
- $msg = $('<p class="box-warning">' + stopper.message + '</p>');
+ $msg = $('<div class="box-warning">' + stopper.message + '</div>');
}
$msg.attr('id', stopperId);
$msg.attr('role', 'alert');
@@ -1200,6 +1206,14 @@ fixmystreet.message_controller = (function() {
register_category: function(params) {
stoppers.push(params);
+ },
+
+ unregister_all_categories: function() {
+ stoppers = [];
+ },
+
+ add_ignored_body: function(body) {
+ ignored_bodies.push(body);
}
};
diff --git a/web/cobrands/fixmystreet/fixmystreet.js b/web/cobrands/fixmystreet/fixmystreet.js
index 704a665ff..8bcb71a3a 100644
--- a/web/cobrands/fixmystreet/fixmystreet.js
+++ b/web/cobrands/fixmystreet/fixmystreet.js
@@ -459,6 +459,12 @@ $.extend(fixmystreet.set_up, {
$(".js-hide-if-public-category").hide();
}
+ if (fixmystreet.message_controller && data && data.disable_form && data.disable_form.answers) {
+ $('#form_' + data.disable_form.code).on('change.category', function() {
+ $(fixmystreet).trigger('report_new:category_change');
+ });
+ }
+
// remove existing validation rules
validation_rules = fixmystreet.validator.settings.rules;
$.each(validation_rules, function(rule) {
@@ -1256,6 +1262,26 @@ fixmystreet.fetch_reporting_data = function() {
fixmystreet.update_councils_text(data);
$('#js-top-message').html(data.top_message || '');
+ if (fixmystreet.message_controller) {
+ fixmystreet.message_controller.unregister_all_categories();
+ $.each(data.by_category, function(category, details) {
+ if (!details.disable_form) {
+ return;
+ }
+ if (details.disable_form.all) {
+ fixmystreet.message_controller.register_category({
+ category: category,
+ message: details.disable_form.all
+ });
+ }
+ if (details.disable_form.answers) {
+ details.disable_form.category = category;
+ details.disable_form.keep_category_extras = true;
+ fixmystreet.message_controller.register_category(details.disable_form);
+ }
+ });
+ }
+
$('#form_category_row').html(data.category);
if ($("#form_category option[value=\"" + old_category + "\"]").length) {
$("#form_category").val(old_category);
diff --git a/web/cobrands/northamptonshire/assets.js b/web/cobrands/northamptonshire/assets.js
index 07745ac8b..dcbb599ff 100644
--- a/web/cobrands/northamptonshire/assets.js
+++ b/web/cobrands/northamptonshire/assets.js
@@ -552,21 +552,6 @@ fixmystreet.assets.add(northants_road_defaults, {
]
});
-fixmystreet.message_controller.register_category({
- body: northants_defaults.body,
- category: function() {
- return !!$('label[for=form_emergency]').length;
- },
- message: function() {
- return $('<div class="box-warning">' + $('label[for=form_emergency]').html() + '</div>');
- },
- staff_ignore: true
-});
-
-fixmystreet.message_controller.register_category({
- body: northants_defaults.body,
- category: 'Street lighting',
- message: 'Street lighting in Northamptonshire is maintained by Balfour Beatty on behalf of the County Council under a Street Lighting Private Finance Initiative (PFI) contract. Please view our <b><a href="https://www3.northamptonshire.gov.uk/councilservices/northamptonshire-highways/roads-and-streets/Pages/street-lighting.aspx">Street Lighting</a></b> page to report any issues.'
-});
+fixmystreet.message_controller.add_ignored_body(northants_defaults.body);
})();
diff --git a/web/cobrands/oxfordshire/assets.js b/web/cobrands/oxfordshire/assets.js
deleted file mode 100644
index df60b89c7..000000000
--- a/web/cobrands/oxfordshire/assets.js
+++ /dev/null
@@ -1,5 +0,0 @@
-fixmystreet.message_controller.register_category({
- body: 'Oxfordshire County Council',
- category: 'Countryside Paths / Public Rights of Way (usually not tarmac)',
- message: 'Please report problems with rights of way using <a href="https://publicrightsofway.oxfordshire.gov.uk/web/standardmap.aspx">this page</a>.'
-});