diff options
Diffstat (limited to 'perllib/FixMyStreet')
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Admin/Bodies.pm | 5 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/BathNES.pm | 13 |
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; |