]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0319.schema.authority-update-propogation.sql
LP1894131 Sticky catalog holdings org select
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0319.schema.authority-update-propogation.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0319'); --miker
4
5 -- Making this a global_flag (UI accessible) instead of an internal_flag
6 INSERT INTO config.global_flag (name, label) -- defaults to enabled=FALSE
7     VALUES (
8         'ingest.disable_authority_linking',
9         oils_i18n_gettext(
10             'ingest.disable_authority_linking',
11             'Authority Automation: Disable bib-authority link tracking',
12             'cgf', 
13             'label'
14         )
15     );
16 UPDATE config.global_flag SET enabled = (SELECT enabled FROM ONLY config.internal_flag WHERE name = 'ingest.disable_authority_linking');
17 DELETE FROM config.internal_flag WHERE name = 'ingest.disable_authority_linking';
18
19 INSERT INTO config.global_flag (name, label) -- defaults to enabled=FALSE
20     VALUES (
21         'ingest.disable_authority_auto_update',
22         oils_i18n_gettext(
23             'ingest.disable_authority_auto_update',
24             'Authority Automation: Disable automatic authority updating (requires link tracking)',
25             'cgf', 
26             'label'
27         )
28     );
29
30
31 CREATE OR REPLACE FUNCTION authority.propagate_changes (aid BIGINT, bid BIGINT) RETURNS BIGINT AS $func$
32     UPDATE  biblio.record_entry
33       SET   marc = vandelay.merge_record_xml( marc, authority.generate_overlay_template( $1 ) )
34       WHERE id = $2;
35     SELECT $2;
36 $func$ LANGUAGE SQL;
37
38 CREATE OR REPLACE FUNCTION authority.propagate_changes (aid BIGINT) RETURNS SETOF BIGINT AS $func$
39     SELECT authority.propagate_changes( authority, bib ) FROM authority.bib_linking WHERE authority = $1;
40 $func$ LANGUAGE SQL;
41
42 CREATE OR REPLACE FUNCTION authority.indexing_ingest_or_delete () RETURNS TRIGGER AS $func$
43 BEGIN
44
45     IF NEW.deleted IS TRUE THEN -- If this authority is deleted
46         RETURN NEW; -- and ... we're done
47     END IF;
48
49     IF TG_OP = 'UPDATE' THEN -- re-ingest?
50         PERFORM * FROM config.internal_flag WHERE name = 'ingest.reingest.force_on_same_marc' AND enabled;
51
52         IF NOT FOUND AND OLD.marc = NEW.marc THEN -- don't do anything if the MARC didn't change
53             RETURN NEW;
54         END IF;
55     END IF;
56
57
58     -- authority change propogation
59     PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_authority_auto_update' AND enabled;
60     IF NOT FOUND THEN
61         PERFORM authority.propagate_changes( NEW.id );
62     END IF;
63
64     RETURN NEW;
65 END;
66 $func$ LANGUAGE PLPGSQL;
67
68 CREATE TRIGGER aaa_auth_ingest_or_delete AFTER INSERT OR UPDATE ON authority.record_entry FOR EACH ROW EXECUTE PROCEDURE authority.indexing_ingest_or_delete ();
69
70
71 COMMIT;
72