diff --git a/db/patches/2320_organization_alt_name_alterations.sql b/db/patches/2320_organization_alt_name_alterations.sql new file mode 100644 index 00000000..46e661b9 --- /dev/null +++ b/db/patches/2320_organization_alt_name_alterations.sql @@ -0,0 +1,11 @@ +ALTER TABLE organization_alternate_name + ADD COLUMN identifier SERIAL; +ALTER TABLE organization_alternate_name + DROP CONSTRAINT organization_alternate_name_pkey; +ALTER TABLE organization_alternate_name + ADD PRIMARY KEY (identifier); +ALTER TABLE organization_alternate_name + ADD UNIQUE (organization_identifier, alternate_name); + + +COMMENT ON COLUMN organization_alternate_name.identifier IS 'An automatically-generated unique numeric identifier.'; diff --git a/lib/Tuba.pm b/lib/Tuba.pm index a9a20c95..b9115d47 100644 --- a/lib/Tuba.pm +++ b/lib/Tuba.pm @@ -399,6 +399,8 @@ sub startup { $r->find('select_organization')->post('/merge')->to('organization#merge')->name('merge_organization'); $organization->get('/contributions/:role_type_identifier/:resource')->to('organization#contributions')->name('organization_contributions'); + $r->resource('organization_alternate_name'); + $r->resource('gcmd_keyword'); $r->resource('region'); $r->resource('dataset'); diff --git a/lib/Tuba/DB/Mixin/Object/OrganizationAlternateName.pm b/lib/Tuba/DB/Mixin/Object/OrganizationAlternateName.pm new file mode 100644 index 00000000..ff157dd7 --- /dev/null +++ b/lib/Tuba/DB/Mixin/Object/OrganizationAlternateName.pm @@ -0,0 +1,12 @@ +package Tuba::DB::Object::OrganizationAlternateName; +use strict; + +sub stringify { + my $c = shift; + return $c->alternate_name + || $c->organization_identifier + || $c->SUPER::stringify(@_); +} + +1; + diff --git a/lib/Tuba/OrganizationAlternateName.pm b/lib/Tuba/OrganizationAlternateName.pm new file mode 100644 index 00000000..3e56c575 --- /dev/null +++ b/lib/Tuba/OrganizationAlternateName.pm @@ -0,0 +1,32 @@ +=head1 NAME + +Tuba::OrganizationAlternateName : Controller class for Alternate Names for Organizations. + +=cut + +package Tuba::OrganizationAlternateName; +use Mojo::Base qw/Tuba::Controller/; +use Tuba::DB::Objects qw/-nicknames/; + +=head1 show + +Show redirects to the Organization + +=cut + +sub _default_list_order { + return "organization_identifier"; +} + +sub show { + my $c = shift; + my $identifier = $c->stash('organization_alternate_name_identifier'); + + my $object = OrganizationAlternateName->new( identifier => $identifier ) + ->load( speculative => 1 ) or return $c->reply->not_found; + + $c->redirect_to('show_organization' => { organization_identifier => $object->organization_identifier } ); +} + +1; + diff --git a/lib/Tuba/files/templates/organization_alternate_name/objects.html.ep b/lib/Tuba/files/templates/organization_alternate_name/objects.html.ep new file mode 100644 index 00000000..3477b497 --- /dev/null +++ b/lib/Tuba/files/templates/organization_alternate_name/objects.html.ep @@ -0,0 +1,31 @@ +% layout 'default'; + +
Organization | +Alternate Name | + +% for my $alt_name (@$objects) { +
---|---|
<%= obj_link_to $alt_name, 'show' => begin %><%= $alt_name->organization_identifier %><%= end %> | +<%= obj_link_to $alt_name, 'show' => begin %><%= $alt_name->alternate_name %><%= end %> | +