]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0910.schema.message-center.sql
LP#1178377: Make bib source optional element from unapi.bre
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0910.schema.message-center.sql
1 BEGIN;
2
3 SELECT evergreen.upgrade_deps_block_check('0910', :eg_version);
4
5 CREATE TABLE actor.usr_message (
6     id          SERIAL                      PRIMARY KEY,
7     usr         INT                         NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED,
8     title       TEXT,
9     message     TEXT                        NOT NULL,
10     create_date TIMESTAMP WITH TIME ZONE    NOT NULL DEFAULT NOW(),
11     deleted     BOOL                        NOT NULL DEFAULT FALSE,
12     read_date   TIMESTAMP WITH TIME ZONE,
13     sending_lib INT                         NOT NULL REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED
14 );
15 CREATE INDEX aum_usr ON actor.usr_message (usr);
16
17 CREATE RULE protect_usr_message_delete AS
18     ON DELETE TO actor.usr_message DO INSTEAD (
19         UPDATE actor.usr_message
20             SET deleted = TRUE
21             WHERE OLD.id = actor.usr_message.id
22     );
23
24 ALTER TABLE action_trigger.event_definition
25     ADD COLUMN message_template TEXT,
26     ADD COLUMN message_usr_path TEXT,
27     ADD COLUMN message_library_path TEXT,
28     ADD COLUMN message_title TEXT;
29
30 CREATE FUNCTION actor.convert_usr_note_to_message () RETURNS TRIGGER AS $$
31 BEGIN
32     IF NEW.pub THEN
33         IF TG_OP = 'UPDATE' THEN
34             IF OLD.pub = TRUE THEN
35                 RETURN NEW;
36             END IF;
37         END IF;
38
39         INSERT INTO actor.usr_message (usr, title, message, sending_lib)
40             VALUES (NEW.usr, NEW.title, NEW.value, (SELECT home_ou FROM actor.usr WHERE id = NEW.creator));
41     END IF;
42
43     RETURN NEW;
44 END;
45 $$ LANGUAGE PLPGSQL;
46
47 CREATE TRIGGER convert_usr_note_to_message_tgr
48     AFTER INSERT OR UPDATE ON actor.usr_note
49     FOR EACH ROW EXECUTE PROCEDURE actor.convert_usr_note_to_message();
50
51 CREATE VIEW actor.usr_message_limited
52 AS SELECT * FROM actor.usr_message;
53
54 CREATE FUNCTION actor.restrict_usr_message_limited () RETURNS TRIGGER AS $$
55 BEGIN
56     IF TG_OP = 'UPDATE' THEN
57         UPDATE actor.usr_message
58         SET    read_date = NEW.read_date,
59                deleted   = NEW.deleted
60         WHERE  id = NEW.id;
61         RETURN NEW;
62     END IF;
63     RETURN NULL;
64 END;
65 $$ LANGUAGE PLPGSQL;
66
67 CREATE TRIGGER restrict_usr_message_limited_tgr
68     INSTEAD OF UPDATE OR INSERT OR DELETE ON actor.usr_message_limited
69     FOR EACH ROW EXECUTE PROCEDURE actor.restrict_usr_message_limited();
70
71 -- and copy over existing public user notes as (read) patron messages
72 INSERT INTO actor.usr_message (usr, title, message, sending_lib, create_date, read_date)
73 SELECT aun.usr, title, value, home_ou, aun.create_date, NOW()
74 FROM actor.usr_note aun
75 JOIN actor.usr au ON (au.id = aun.usr)
76 WHERE aun.pub;
77
78 COMMIT;
79