LP#1673857: schema, IDL, library settings & perms for copy tags
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / XXXX.schema.copy_tags.sql
1 BEGIN;
2
3 CREATE TABLE config.copy_tag_type (
4     code            TEXT NOT NULL PRIMARY KEY,
5     label           TEXT NOT NULL,
6     owner           INTEGER NOT NULL REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED
7 );
8
9 CREATE INDEX config_copy_tag_type_owner_idx
10     ON config.copy_tag_type (owner);
11
12 CREATE TABLE asset.copy_tag (
13     id              SERIAL PRIMARY KEY,
14     tag_type        TEXT REFERENCES config.copy_tag_type (code)
15                     ON UPDATE CASCADE ON DELETE CASCADE,
16     label           TEXT NOT NULL,
17     value           TEXT NOT NULL,
18     index_vector    tsvector NOT NULL,
19     staff_note      TEXT,
20     pub             BOOLEAN DEFAULT TRUE,
21     owner           INTEGER NOT NULL REFERENCES actor.org_unit (id)
22 );
23
24 CREATE INDEX asset_copy_tag_label_idx
25     ON asset.copy_tag (label);
26 CREATE INDEX asset_copy_tag_label_lower_idx
27     ON asset.copy_tag (evergreen.lowercase(label));
28 CREATE INDEX asset_copy_tag_index_vector_idx
29     ON asset.copy_tag
30     USING GIN(index_vector);
31 CREATE INDEX asset_copy_tag_tag_type_idx
32     ON asset.copy_tag (tag_type);
33 CREATE INDEX asset_copy_tag_owner_idx
34     ON asset.copy_tag (owner);
35
36 CREATE OR REPLACE FUNCTION asset.set_copy_tag_value () RETURNS TRIGGER AS $$
37 BEGIN
38     IF NEW.value IS NULL THEN
39         NEW.value = NEW.label;        
40     END IF;
41
42     RETURN NEW;
43 END;
44 $$ LANGUAGE 'plpgsql';
45
46 -- name of following trigger chosen to ensure it runs first
47 CREATE TRIGGER asset_copy_tag_do_value
48     BEFORE INSERT OR UPDATE ON asset.copy_tag
49     FOR EACH ROW EXECUTE PROCEDURE asset.set_copy_tag_value();
50 CREATE TRIGGER asset_copy_tag_fti_trigger
51     BEFORE UPDATE OR INSERT ON asset.copy_tag
52     FOR EACH ROW EXECUTE PROCEDURE oils_tsearch2('default');
53
54 CREATE TABLE asset.copy_tag_copy_map (
55     id              BIGSERIAL PRIMARY KEY,
56     copy            BIGINT REFERENCES asset.copy (id)
57                     ON UPDATE CASCADE ON DELETE CASCADE,
58     tag             INTEGER REFERENCES asset.copy_tag (id)
59                     ON UPDATE CASCADE ON DELETE CASCADE
60 );
61
62 CREATE INDEX asset_copy_tag_copy_map_copy_idx
63     ON asset.copy_tag_copy_map (copy);
64 CREATE INDEX asset_copy_tag_copy_map_tag_idx
65     ON asset.copy_tag_copy_map (tag);
66
67 INSERT INTO config.copy_tag_type (code, label, owner) VALUES ('bookplate', 'Digital Bookplate', 1);
68
69 INSERT INTO permission.perm_list ( id, code, description ) VALUES
70  ( 590, 'ADMIN_COPY_TAG_TYPES', oils_i18n_gettext( 590,
71     'Administer copy tag types', 'ppl', 'description' )),
72  ( 591, 'ADMIN_COPY_TAG', oils_i18n_gettext( 591,
73     'Administer copy tag', 'ppl', 'description' ))
74 ;
75
76 INSERT INTO config.org_unit_setting_type
77     (name, label, description, grp, datatype)
78 VALUES (
79     'opac.search.enable_bookplate_search',
80     oils_i18n_gettext(
81         'opac.search.enable_bookplate_search',
82         'Enable Digital Bookplate Search',
83         'coust',
84         'label'
85     ),
86     oils_i18n_gettext(
87         'opac.search.enable_bookplate_search',
88         'If enabled, adds a "Digital Bookplate" option to the query type selectors in the public catalog for search on copy tags.',   
89         'coust',
90         'description'
91     ),
92     'opac',
93     'bool'
94 );
95
96 COMMIT;