File: 01-kalkun-smsd-inject-trigger.pgsql.sql

package info (click to toggle)
kalkun 0.8.3.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,340 kB
  • sloc: php: 30,659; javascript: 30,443; sql: 961; sh: 766; xml: 105; makefile: 41
file content (38 lines) | stat: -rw-r--r-- 1,445 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
-- If a message is sent by gammu-smsd-inject, Kalkun won't display it.
-- However, if we create a 'trigger' on the addition of a message in outbox
-- that will create the corresponding record in user_oubox, kalkun will display
-- it. Display will be done either for a kalkun username of "smsd-inject", or
-- if that user doesn't exist, for user "kalkun".
-- It is not needed to do this for messages in "sentitems"
--
-- We have to be sure this trigger is not triggered if the message is sent
-- by kalkun the kalkun web interface.
--
-- Processing of incoming messages is managed by Kalkun's daemon which is triggered by
-- RunOnReceive in gammu-smsd config

CREATE OR REPLACE FUNCTION fn_outbox_item_inserted()
  RETURNS TRIGGER AS 
$$
DECLARE
    var_id_user integer := 1;
BEGIN
    IF (SELECT id_outbox FROM user_outbox WHERE id_outbox = NEW."ID") IS NULL THEN
    IF NEW."CreatorID" LIKE 'Gammu%' THEN
        SELECT (id_user) INTO var_id_user FROM "user" WHERE username = 'smsd-inject';
        IF var_id_user IS NULL THEN
            INSERT INTO user_outbox VALUES (NEW."ID",1);
        ELSE
            INSERT INTO user_outbox VALUES (NEW."ID",var_id_user);
        END IF;
    END IF;
    END IF;
    RETURN NEW;
END $$ LANGUAGE 'plpgsql';

DROP TRIGGER IF EXISTS "outbox_item_inserted" ON "outbox";
CREATE TRIGGER "outbox_item_inserted" 
    AFTER INSERT 
    ON outbox
    FOR EACH ROW
    EXECUTE PROCEDURE fn_outbox_item_inserted();