| rev | 
   line source | 
| 
poelzi@79
 | 
     1 BEGIN;
 | 
| 
poelzi@79
 | 
     2  
 | 
| 
poelzi@79
 | 
     3 CREATE OR REPLACE VIEW "liquid_feedback_version" AS
 | 
| 
poelzi@79
 | 
     4   SELECT * FROM (VALUES ('1.2.9', 1, 2, 9))
 | 
| 
poelzi@79
 | 
     5   AS "subquery"("string", "major", "minor", "revision");
 | 
| 
poelzi@79
 | 
     6 
 | 
| 
poelzi@79
 | 
     7 
 | 
| 
poelzi@79
 | 
     8 ALTER TABLE "supporter" ADD "auto_support" BOOLEAN NOT NULL DEFAULT 'f';
 | 
| 
poelzi@79
 | 
     9 
 | 
| 
poelzi@80
 | 
    10 CREATE FUNCTION VOLATILE update_supporter_drafts()
 | 
| 
poelzi@79
 | 
    11   RETURNS trigger
 | 
| 
poelzi@79
 | 
    12   LANGUAGE 'plpgsql' AS $$
 | 
| 
poelzi@79
 | 
    13   BEGIN
 | 
| 
poelzi@79
 | 
    14     UPDATE supporter SET draft_id = NEW.id 
 | 
| 
poelzi@79
 | 
    15     WHERE initiative_id = NEW.initiative_id AND
 | 
| 
poelzi@79
 | 
    16           (auto_support = 't' OR member_id = NEW.author_id);
 | 
| 
poelzi@79
 | 
    17     RETURN new;
 | 
| 
poelzi@79
 | 
    18   END
 | 
| 
poelzi@79
 | 
    19 $$;
 | 
| 
poelzi@79
 | 
    20 
 | 
| 
poelzi@79
 | 
    21 COMMENT ON FUNCTION "update_supporter_drafts"() IS 'Automaticly update the supported draft_id to the latest version when auto_support is enabled';
 | 
| 
poelzi@79
 | 
    22 
 | 
| 
poelzi@79
 | 
    23 CREATE TRIGGER "update_draft_supporter"
 | 
| 
poelzi@79
 | 
    24   AFTER INSERT ON "draft"
 | 
| 
poelzi@79
 | 
    25   FOR EACH ROW EXECUTE PROCEDURE
 | 
| 
poelzi@79
 | 
    26   update_supporter_drafts();
 | 
| 
poelzi@79
 | 
    27 
 | 
| 
poelzi@79
 | 
    28 CREATE FUNCTION "check_delegation"()
 | 
| 
poelzi@79
 | 
    29   RETURNS TRIGGER
 | 
| 
poelzi@79
 | 
    30   LANGUAGE 'plpgsql' VOLATILE AS $$
 | 
| 
poelzi@79
 | 
    31   BEGIN
 | 
| 
poelzi@79
 | 
    32     IF EXISTS (
 | 
| 
poelzi@79
 | 
    33       SELECT NULL FROM "member" WHERE 
 | 
| 
poelzi@79
 | 
    34         "id" = NEW."trustee_id" AND active = 'n'
 | 
| 
poelzi@79
 | 
    35     ) THEN
 | 
| 
poelzi@79
 | 
    36       RAISE EXCEPTION 'Cannot delegate to an inactive member';
 | 
| 
poelzi@79
 | 
    37     END IF;
 | 
| 
poelzi@79
 | 
    38     RETURN NEW;
 | 
| 
poelzi@79
 | 
    39   END;
 | 
| 
poelzi@79
 | 
    40 $$;
 | 
| 
poelzi@79
 | 
    41 
 | 
| 
poelzi@79
 | 
    42 CREATE TRIGGER "update_delegation"
 | 
| 
poelzi@79
 | 
    43   BEFORE INSERT OR UPDATE ON "delegation"
 | 
| 
poelzi@79
 | 
    44   FOR EACH ROW EXECUTE PROCEDURE
 | 
| 
poelzi@79
 | 
    45   check_delegation();
 | 
| 
poelzi@79
 | 
    46 
 | 
| 
poelzi@79
 | 
    47 CREATE OR REPLACE FUNCTION "delete_member"("member_id_p" "member"."id"%TYPE)
 | 
| 
poelzi@79
 | 
    48   RETURNS VOID
 | 
| 
poelzi@79
 | 
    49   LANGUAGE 'plpgsql' VOLATILE AS $$
 | 
| 
poelzi@79
 | 
    50     BEGIN
 | 
| 
poelzi@79
 | 
    51       UPDATE "member" SET
 | 
| 
poelzi@79
 | 
    52         "last_login"                   = NULL,
 | 
| 
poelzi@79
 | 
    53         "login"                        = NULL,
 | 
| 
poelzi@79
 | 
    54         "password"                     = NULL,
 | 
| 
poelzi@79
 | 
    55         "active"                       = FALSE,
 | 
| 
poelzi@79
 | 
    56         "notify_email"                 = NULL,
 | 
| 
poelzi@79
 | 
    57         "notify_email_unconfirmed"     = NULL,
 | 
| 
poelzi@79
 | 
    58         "notify_email_secret"          = NULL,
 | 
| 
poelzi@79
 | 
    59         "notify_email_secret_expiry"   = NULL,
 | 
| 
poelzi@79
 | 
    60         "notify_email_lock_expiry"     = NULL,
 | 
| 
poelzi@79
 | 
    61         "password_reset_secret"        = NULL,
 | 
| 
poelzi@79
 | 
    62         "password_reset_secret_expiry" = NULL,
 | 
| 
poelzi@79
 | 
    63         "organizational_unit"          = NULL,
 | 
| 
poelzi@79
 | 
    64         "internal_posts"               = NULL,
 | 
| 
poelzi@79
 | 
    65         "realname"                     = NULL,
 | 
| 
poelzi@79
 | 
    66         "birthday"                     = NULL,
 | 
| 
poelzi@79
 | 
    67         "address"                      = NULL,
 | 
| 
poelzi@79
 | 
    68         "email"                        = NULL,
 | 
| 
poelzi@79
 | 
    69         "xmpp_address"                 = NULL,
 | 
| 
poelzi@79
 | 
    70         "website"                      = NULL,
 | 
| 
poelzi@79
 | 
    71         "phone"                        = NULL,
 | 
| 
poelzi@79
 | 
    72         "mobile_phone"                 = NULL,
 | 
| 
poelzi@79
 | 
    73         "profession"                   = NULL,
 | 
| 
poelzi@79
 | 
    74         "external_memberships"         = NULL,
 | 
| 
poelzi@79
 | 
    75         "external_posts"               = NULL,
 | 
| 
poelzi@79
 | 
    76         "statement"                    = NULL
 | 
| 
poelzi@79
 | 
    77         WHERE "id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    78       -- "text_search_data" is updated by triggers
 | 
| 
poelzi@79
 | 
    79       DELETE FROM "setting"            WHERE "member_id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    80       DELETE FROM "setting_map"        WHERE "member_id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    81       DELETE FROM "member_relation_setting" WHERE "member_id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    82       DELETE FROM "member_image"       WHERE "member_id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    83       DELETE FROM "contact"            WHERE "member_id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    84       DELETE FROM "area_setting"       WHERE "member_id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    85       DELETE FROM "issue_setting"      WHERE "member_id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    86       DELETE FROM "initiative_setting" WHERE "member_id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    87       DELETE FROM "suggestion_setting" WHERE "member_id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    88       DELETE FROM "membership"         WHERE "member_id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    89       DELETE FROM "delegation"         WHERE "truster_id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    90       DELETE FROM "delegation"         WHERE "trustee_id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    91       DELETE FROM "direct_voter" USING "issue"
 | 
| 
poelzi@79
 | 
    92         WHERE "direct_voter"."issue_id" = "issue"."id"
 | 
| 
poelzi@79
 | 
    93         AND "issue"."closed" ISNULL
 | 
| 
poelzi@79
 | 
    94         AND "member_id" = "member_id_p";
 | 
| 
poelzi@79
 | 
    95       RETURN;
 | 
| 
poelzi@79
 | 
    96     END;
 | 
| 
poelzi@79
 | 
    97   $$;
 | 
| 
poelzi@79
 | 
    98 
 | 
| 
poelzi@79
 | 
    99 COMMENT ON FUNCTION "delete_member"("member_id_p" "member"."id"%TYPE) IS 'Deactivate member and clear certain settings and data of this member (data protection)';
 | 
| 
poelzi@79
 | 
   100 
 | 
| 
poelzi@81
 | 
   101 CREATE INDEX "initiative_issue_id_idx" ON "initiative" ("issue_id");
 | 
| 
poelzi@81
 | 
   102 
 | 
| 
poelzi@79
 | 
   103 COMMIT;
 |