]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0514.schema.unapi2-strip-whitespace.sql
LP1615805 No inputs after submit in patron search (AngularJS)
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0514.schema.unapi2-strip-whitespace.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0514'); -- miker
4
5 CREATE OR REPLACE FUNCTION unapi.bre ( obj_id BIGINT, format TEXT,  ename TEXT, includes TEXT[], org TEXT, depth INT DEFAULT NULL, slimit INT DEFAULT NULL, soffset INT DEFAULT NULL, include_xmlns BOOL DEFAULT TRUE ) RETURNS XML AS $F$
6 DECLARE
7     me      biblio.record_entry%ROWTYPE;
8     layout  unapi.bre_output_layout%ROWTYPE;
9     xfrm    config.xml_transform%ROWTYPE;
10     ouid    INT;
11     tmp_xml TEXT;
12     top_el  TEXT;
13     output  XML;
14     hxml    XML;
15     axml    XML;
16 BEGIN
17
18     SELECT id INTO ouid FROM actor.org_unit WHERE shortname = org;
19
20     IF ouid IS NULL THEN
21         RETURN NULL::XML;
22     END IF;
23
24     IF format = 'holdings_xml' THEN -- the special case
25         output := unapi.holdings_xml( obj_id, ouid, org, depth, includes, slimit, soffset, include_xmlns);
26         RETURN output;
27     END IF;
28
29     SELECT * INTO layout FROM unapi.bre_output_layout WHERE name = format;
30
31     IF layout.name IS NULL THEN
32         RETURN NULL::XML;
33     END IF;
34
35     SELECT * INTO xfrm FROM config.xml_transform WHERE name = layout.transform;
36
37     SELECT * INTO me FROM biblio.record_entry WHERE id = obj_id;
38
39     -- grab SVF if we need them
40     IF ('mra' = ANY (includes)) THEN
41         axml := unapi.mra(obj_id,NULL,NULL,NULL,NULL);
42     ELSE
43         axml := NULL::XML;
44     END IF;
45
46     -- grab hodlings if we need them
47     IF ('holdings_xml' = ANY (includes)) THEN
48         hxml := unapi.holdings_xml(obj_id, ouid, org, depth, evergreen.array_remove_item_by_value(includes,'holdings_xml'), slimit, soffset, include_xmlns);
49     ELSE
50         hxml := NULL::XML;
51     END IF;
52
53
54     -- generate our item node
55
56
57     IF format = 'marcxml' THEN
58         tmp_xml := me.marc;
59         IF tmp_xml !~ E'<marc:' THEN -- If we're not using the prefixed namespace in this record, then remove all declarations of it
60            tmp_xml := REGEXP_REPLACE(tmp_xml, ' xmlns:marc="http://www.loc.gov/MARC21/slim"', '', 'g');
61         END IF;
62     ELSE
63         tmp_xml := oils_xslt_process(me.marc, xfrm.xslt)::XML;
64     END IF;
65
66     top_el := REGEXP_REPLACE(tmp_xml, E'^.*?<((?:\\S+:)?' || layout.holdings_element || ').*$', E'\\1');
67
68     IF axml IS NOT NULL THEN
69         tmp_xml := REGEXP_REPLACE(tmp_xml, '</' || top_el || '>(.*?)$', axml || '</' || top_el || E'>\\1');
70     END IF;
71
72     IF hxml IS NOT NULL THEN -- XXX how do we configure the holdings position?
73         tmp_xml := REGEXP_REPLACE(tmp_xml, '</' || top_el || '>(.*?)$', hxml || '</' || top_el || E'>\\1');
74     END IF;
75
76     IF ('bre.unapi' = ANY (includes)) THEN
77         output := REGEXP_REPLACE(
78             tmp_xml,
79             '</' || top_el || '>(.*?)',
80             XMLELEMENT(
81                 name abbr,
82                 XMLATTRIBUTES(
83                     'http://www.w3.org/1999/xhtml' AS xmlns,
84                     'unapi-id' AS class,
85                     'tag:open-ils.org:U2@bre/' || obj_id || '/' || org AS title
86                 )
87             )::TEXT || '</' || top_el || E'>\\1'
88         );
89     ELSE
90         output := tmp_xml;
91     END IF;
92
93     output := REGEXP_REPLACE(output::TEXT,E'>\\s+<','><','gs')::XML;
94     RETURN output;
95 END;
96 $F$ LANGUAGE PLPGSQL;
97
98 COMMIT;
99