]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/version-upgrade/2.1.2-2.1.3-upgrade-db.sql
LP#1178377: Expose bib source in TPAC
[working/Evergreen.git] / Open-ILS / src / sql / Pg / version-upgrade / 2.1.2-2.1.3-upgrade-db.sql
1 --Upgrade Script for 2.1.2 to 2.1.3
2 BEGIN;
3 INSERT INTO config.upgrade_log (version) VALUES ('2.1.3');
4 -- Evergreen DB patch 0722.schema.acq-po-state-constraint.sql
5 --
6
7 INSERT INTO config.upgrade_log (version) VALUES ('0722');
8
9 ALTER TABLE acq.purchase_order ADD CONSTRAINT valid_po_state 
10     CHECK (state IN ('new','pending','on-order','received','cancelled'));
11
12
13 INSERT INTO config.upgrade_log (version) VALUES ('0725'); -- gmcharlt/denials
14 INSERT INTO config.upgrade_log (version) VALUES ('0726'); -- denials
15
16 CREATE OR REPLACE FUNCTION evergreen.maintain_901 () RETURNS TRIGGER AS $func$
17 use strict;
18 use MARC::Record;
19 use MARC::File::XML (BinaryEncoding => 'UTF-8');
20 use MARC::Charset;
21 use Encode;
22 use Unicode::Normalize;
23
24 MARC::Charset->assume_unicode(1);
25
26 my $schema = $_TD->{table_schema};
27 my $marc = MARC::Record->new_from_xml($_TD->{new}{marc});
28
29 my @old901s = $marc->field('901');
30 $marc->delete_fields(@old901s);
31
32 if ($schema eq 'biblio') {
33     my $tcn_value = $_TD->{new}{tcn_value};
34
35     # Set TCN value to record ID?
36     my $id_as_tcn = spi_exec_query("
37         SELECT enabled
38         FROM config.global_flag
39         WHERE name = 'cat.bib.use_id_for_tcn'
40     ");
41     if (($id_as_tcn->{processed}) && $id_as_tcn->{rows}[0]->{enabled} eq 't') {
42         $tcn_value = $_TD->{new}{id}; 
43     }
44
45     my $new_901 = MARC::Field->new("901", " ", " ",
46         "a" => $tcn_value,
47         "b" => $_TD->{new}{tcn_source},
48         "c" => $_TD->{new}{id},
49         "t" => $schema
50     );
51
52     if ($_TD->{new}{owner}) {
53         $new_901->add_subfields("o" => $_TD->{new}{owner});
54     }
55
56     if ($_TD->{new}{share_depth}) {
57         $new_901->add_subfields("d" => $_TD->{new}{share_depth});
58     }
59
60     $marc->append_fields($new_901);
61 } elsif ($schema eq 'authority') {
62     my $new_901 = MARC::Field->new("901", " ", " ",
63         "c" => $_TD->{new}{id},
64         "t" => $schema,
65     );
66     $marc->append_fields($new_901);
67 } elsif ($schema eq 'serial') {
68     my $new_901 = MARC::Field->new("901", " ", " ",
69         "c" => $_TD->{new}{id},
70         "t" => $schema,
71         "o" => $_TD->{new}{owning_lib},
72     );
73
74     if ($_TD->{new}{record}) {
75         $new_901->add_subfields("r" => $_TD->{new}{record});
76     }
77
78     $marc->append_fields($new_901);
79 } else {
80     my $new_901 = MARC::Field->new("901", " ", " ",
81         "c" => $_TD->{new}{id},
82         "t" => $schema,
83     );
84     $marc->append_fields($new_901);
85 }
86
87 my $xml = $marc->as_xml_record();
88 $xml =~ s/\n//sgo;
89 $xml =~ s/^<\?xml.+\?\s*>//go;
90 $xml =~ s/>\s+</></go;
91 $xml =~ s/\p{Cc}//go;
92
93 # Embed a version of OpenILS::Application::AppUtils->entityize()
94 # to avoid having to set PERL5LIB for PostgreSQL as well
95
96 # If we are going to convert non-ASCII characters to XML entities,
97 # we had better be dealing with a UTF8 string to begin with
98 $xml = decode_utf8($xml);
99
100 $xml = NFC($xml);
101
102 # Convert raw ampersands to entities
103 $xml =~ s/&(?!\S+;)/&amp;/gso;
104
105 # Convert Unicode characters to entities
106 $xml =~ s/([\x{0080}-\x{fffd}])/sprintf('&#x%X;',ord($1))/sgoe;
107
108 $xml =~ s/[\x00-\x1f]//go;
109 $_TD->{new}{marc} = $xml;
110
111 return "MODIFY";
112 $func$ LANGUAGE PLPERLU;
113
114 COMMIT;