]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0513.schema.svf-in-unapi2.sql
LP1779158 Angular7 and ng-lint updates
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0513.schema.svf-in-unapi2.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0513'); -- miker
4
5 CREATE OR REPLACE FUNCTION unapi.mra ( 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         SELECT  XMLELEMENT(
7                     name attributes,
8                     XMLATTRIBUTES(
9                         CASE WHEN $9 THEN 'http://open-ils.org/spec/indexing/v1' ELSE NULL END AS xmlns,
10                         'tag:open-ils.org:U2@mra/' || mra.id AS id,
11                         'tag:open-ils.org:U2@bre/' || mra.id AS record
12                     ),
13                     (SELECT XMLAGG(foo.y)
14                       FROM (SELECT XMLELEMENT(
15                                 name field,
16                                 XMLATTRIBUTES(
17                                     key AS name,
18                                     cvm.value AS "coded-value",
19                                     rad.filter,
20                                     rad.sorter
21                                 ),
22                                 x.value
23                             )
24                            FROM EACH(mra.attrs) AS x
25                                 JOIN config.record_attr_definition rad ON (x.key = rad.name)
26                                 LEFT JOIN config.coded_value_map cvm ON (cvm.ctype = x.key AND code = x.value)
27                         )foo(y)
28                     )
29                 )
30           FROM  metabib.record_attr mra
31           WHERE mra.id = $1;
32 $F$ LANGUAGE SQL;
33
34 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$
35 DECLARE
36     me      biblio.record_entry%ROWTYPE;
37     layout  unapi.bre_output_layout%ROWTYPE;
38     xfrm    config.xml_transform%ROWTYPE;
39     ouid    INT;
40     tmp_xml TEXT;
41     top_el  TEXT;
42     output  XML;
43     hxml    XML;
44     axml    XML;
45 BEGIN
46
47     SELECT id INTO ouid FROM actor.org_unit WHERE shortname = org;
48
49     IF ouid IS NULL THEN
50         RETURN NULL::XML;
51     END IF;
52
53     IF format = 'holdings_xml' THEN -- the special case
54         output := unapi.holdings_xml( obj_id, ouid, org, depth, includes, slimit, soffset, include_xmlns);
55         RETURN output;
56     END IF;
57
58     SELECT * INTO layout FROM unapi.bre_output_layout WHERE name = format;
59
60     IF layout.name IS NULL THEN
61         RETURN NULL::XML;
62     END IF;
63
64     SELECT * INTO xfrm FROM config.xml_transform WHERE name = layout.transform;
65
66     SELECT * INTO me FROM biblio.record_entry WHERE id = obj_id;
67
68     -- grab SVF if we need them
69     IF ('mra' = ANY (includes)) THEN
70         axml := unapi.mra(obj_id,NULL,NULL,NULL,NULL);
71     ELSE
72         axml := NULL::XML;
73     END IF;
74
75     -- grab hodlings if we need them
76     IF ('holdings_xml' = ANY (includes)) THEN
77         hxml := unapi.holdings_xml(obj_id, ouid, org, depth, evergreen.array_remove_item_by_value(includes,'holdings_xml'), slimit, soffset, include_xmlns);
78     ELSE
79         hxml := NULL::XML;
80     END IF;
81
82
83     -- generate our item node
84
85
86     IF format = 'marcxml' THEN
87         tmp_xml := me.marc;
88         IF tmp_xml !~ E'<marc:' THEN -- If we're not using the prefixed namespace in this record, then remove all declarations of it
89            tmp_xml := REGEXP_REPLACE(tmp_xml, ' xmlns:marc="http://www.loc.gov/MARC21/slim"', '', 'g');
90         END IF;
91     ELSE
92         tmp_xml := oils_xslt_process(me.marc, xfrm.xslt)::XML;
93     END IF;
94
95     top_el := REGEXP_REPLACE(tmp_xml, E'^.*?<((?:\\S+:)?' || layout.holdings_element || ').*$', E'\\1');
96
97     IF axml IS NOT NULL THEN
98         tmp_xml := REGEXP_REPLACE(tmp_xml, '</' || top_el || '>(.*?)$', axml || '</' || top_el || E'>\\1');
99     END IF;
100
101     IF hxml IS NOT NULL THEN -- XXX how do we configure the holdings position?
102         tmp_xml := REGEXP_REPLACE(tmp_xml, '</' || top_el || '>(.*?)$', hxml || '</' || top_el || E'>\\1');
103     END IF;
104
105     IF ('bre.unapi' = ANY (includes)) THEN
106         output := REGEXP_REPLACE(
107             tmp_xml,
108             '</' || top_el || '>(.*?)',
109             XMLELEMENT(
110                 name abbr,
111                 XMLATTRIBUTES(
112                     'http://www.w3.org/1999/xhtml' AS xmlns,
113                     'unapi-id' AS class,
114                     'tag:open-ils.org:U2@bre/' || obj_id || '/' || org AS title
115                 )
116             )::TEXT || '</' || top_el || E'>\\1'
117         );
118     ELSE
119         output := tmp_xml;
120     END IF;
121
122     RETURN output;
123 END;
124 $F$ LANGUAGE PLPGSQL;
125
126 COMMIT;
127