Create authority records with meaningful cataloging agency values
authordbs <dbs@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 29 Dec 2010 03:37:38 +0000 (03:37 +0000)
committerdbs <dbs@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 29 Dec 2010 03:37:38 +0000 (03:37 +0000)
Hardcoded values in the 040 are problematic for sites that want
to be a source of authority records; with the addition of another
parameter to the open-ils.cat.authority.record.create_from_bib(.readonly)
API, we can solve that problem. The callers of this API (the MARC editor)
have access to the cat.marc_control_number_identifier OU setting, so as
long as that is set correctly, problem solved.

git-svn-id: svn://svn.open-ils.org/ILS/trunk@19073 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Cat/Authority.pm
Open-ILS/xul/staff_client/server/cat/marcedit.js

index 823f430..1995edf 100644 (file)
@@ -44,6 +44,7 @@ __PACKAGE__->register_method(
         desc => q/Create an authority record entry from a field in a bibliographic record/,
         params => q/
             @param field A hash representing the field to control, consisting of: { tag: string, ind1: string, ind2: string, subfields: [ [code, value] ... ] }
+            @param identifier A MARC control number identifier
             @param authtoken A valid authentication token
             @returns The new record object 
  /}
@@ -56,12 +57,18 @@ __PACKAGE__->register_method(
         desc => q/Creates MARCXML for an authority record entry from a field in a bibliographic record/,
         params => q/
             @param field A hash representing the field to control, consisting of: { tag: string, ind1: string, ind2: string, subfields: [ [code, value] ... ] }
+            @param identifier A MARC control number identifier
             @returns The MARCXML for the authority record
  /}
 );
 
 sub create_authority_record_from_bib_field {
-    my($self, $conn, $field, $auth) = @_;
+    my($self, $conn, $field, $cni, $auth) = @_;
+
+    # Control number identifier should have been passed in
+    if (!$cni) {
+        $cni = 'UNSET';
+    }
 
     # Change the first character of the incoming bib field tag to a '1'
     # for use in our authority record; close enough for now?
@@ -95,7 +102,7 @@ sub create_authority_record_from_bib_field {
 <record xmlns:marc="http://www.loc.gov/MARC21/slim" xmlns="http://www.loc.gov/MARC21/slim"><leader>     nz  a22     o  4500</leader>
 <controlfield tag="001">$arn</controlfield>
 <controlfield tag="008">      ||||||||||||||||||||||||||||||||||</controlfield>
-<datafield tag="040" ind1=" " ind2=" "><subfield code="a">CONS</subfield><subfield code="c">CONS</subfield></datafield>
+<datafield tag="040" ind1=" " ind2=" "><subfield code="a">$cni</subfield><subfield code="c">$cni</subfield></datafield>
 $control
 </record>
 MARCXML
index f1f6ad2..fa86780 100644 (file)
@@ -2398,7 +2398,7 @@ function browseAuthority (sf_popup, menu_id, target, sf, limit, page) {
                     var source_f = summarizeField(sf);
                     var new_auth = fieldmapper.standardRequest(
                         ["open-ils.cat", "open-ils.cat.authority.record.create_from_bib"],
-                        [source_f, ses()]
+                        [source_f, xulG.marc_control_number_identifier, ses()]
                     );
                     if (new_auth && new_auth.id()) {
                         var id_sf = <subfield code="0" xmlns="http://www.loc.gov/MARC21/slim">({xulG.marc_control_number_identifier}){new_auth.id()}</subfield>;
@@ -2423,7 +2423,7 @@ function browseAuthority (sf_popup, menu_id, target, sf, limit, page) {
                     var pcrud = new openils.PermaCrud({"authtoken": authtoken});
                     var rec = fieldmapper.standardRequest(
                         ["open-ils.cat", "open-ils.cat.authority.record.create_from_bib.readonly"],
-                        { "params": [source_f] }
+                        { "params": [source_f, xulG.marc_control_number_identifier] }
                     );
                     loadMarcEditor(pcrud, rec, target, sf);
                 }