aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet')
-rw-r--r--perllib/FixMyStreet/App/Controller/Admin/Bodies.pm5
-rw-r--r--perllib/FixMyStreet/Cobrand/BathNES.pm13
2 files changed, 16 insertions, 2 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Admin/Bodies.pm b/perllib/FixMyStreet/App/Controller/Admin/Bodies.pm
index 8556e8a27..165fdc783 100644
--- a/perllib/FixMyStreet/App/Controller/Admin/Bodies.pm
+++ b/perllib/FixMyStreet/App/Controller/Admin/Bodies.pm
@@ -290,7 +290,7 @@ sub update_contact : Private {
$c->forward('/admin/update_extra_fields', [ $contact ]);
- $c->forward('contact_cobrand_extra_fields', [ $contact ]);
+ $c->forward('contact_cobrand_extra_fields', [ $contact, \%errors ]);
# Special form disabling form
if ($c->get_param('disable')) {
@@ -434,12 +434,13 @@ sub check_body_params : Private {
}
sub contact_cobrand_extra_fields : Private {
- my ( $self, $c, $contact ) = @_;
+ my ( $self, $c, $contact, $errors ) = @_;
my $extra_fields = $c->cobrand->call_hook('contact_extra_fields');
foreach ( @$extra_fields ) {
$contact->set_extra_metadata( $_ => $c->get_param("extra[$_]") );
}
+ $c->cobrand->call_hook(contact_extra_fields_validation => $contact, $errors);
}
sub fetch_translations : Private {
diff --git a/perllib/FixMyStreet/Cobrand/BathNES.pm b/perllib/FixMyStreet/Cobrand/BathNES.pm
index b6014a276..6de28bca8 100644
--- a/perllib/FixMyStreet/Cobrand/BathNES.pm
+++ b/perllib/FixMyStreet/Cobrand/BathNES.pm
@@ -27,6 +27,19 @@ sub get_geocoder {
return 'OSM'; # default of Bing gives poor results, let's try overriding.
}
+sub contact_extra_fields { [ 'display_name' ] }
+
+sub contact_extra_fields_validation {
+ my ($self, $contact, $errors) = @_;
+ return unless $contact->get_extra_metadata('display_name');
+
+ my @contacts = $contact->body->contacts->not_deleted->search({ id => { '!=', $contact->id } });
+ my %display_names = map { $_->get_extra_metadata('display_name') => 1 } @contacts;
+ if ($display_names{$contact->get_extra_metadata('display_name')}) {
+ $errors->{display_name} = 'That display name is already in use';
+ }
+}
+
sub disambiguate_location {
my $self = shift;
my $string = shift;