| rev | 
   line source | 
| 
jbe@205
 | 
     1 BEGIN;
 | 
| 
jbe@205
 | 
     2 
 | 
| 
jbe@212
 | 
     3 -- update version number:
 | 
| 
jbe@211
 | 
     4 CREATE OR REPLACE VIEW "liquid_feedback_version" AS
 | 
| 
jbe@211
 | 
     5   SELECT * FROM (VALUES ('2.0.1', 2, 0, 1))
 | 
| 
jbe@211
 | 
     6   AS "subquery"("string", "major", "minor", "revision");
 | 
| 
jbe@205
 | 
     7 
 | 
| 
jbe@212
 | 
     8 -- fix errors in update script from v1.3.1 to v1.4.0:
 | 
| 
jbe@212
 | 
     9 ALTER TABLE "issue" ALTER "state" SET DEFAULT 'admission';
 | 
| 
jbe@205
 | 
    10 
 | 
| 
jbe@212
 | 
    11 -- change comments in "member" table:
 | 
| 
jbe@211
 | 
    12 COMMENT ON COLUMN "member"."activated" IS 'Timestamp of first activation of account (i.e. usage of "invite_code"); required to be set for "active" members';
 | 
| 
jbe@211
 | 
    13 COMMENT ON COLUMN "member"."statement" IS 'Freely chosen text of the member for his/her profile';
 | 
| 
jbe@211
 | 
    14 
 | 
| 
jbe@212
 | 
    15 -- change comments in "policy" table:
 | 
| 
jbe@211
 | 
    16 COMMENT ON COLUMN "policy"."admission_time"    IS 'Maximum duration of issue state ''admission''; Maximum time an issue stays open without being "accepted"';
 | 
| 
jbe@211
 | 
    17 COMMENT ON COLUMN "policy"."discussion_time"   IS 'Duration of issue state ''discussion''; Regular time until an issue is "half_frozen" after being "accepted"';
 | 
| 
jbe@211
 | 
    18 COMMENT ON COLUMN "policy"."verification_time" IS 'Duration of issue state ''verification''; Regular time until an issue is "fully_frozen" (e.g. entering issue state ''voting'') after being "half_frozen"';
 | 
| 
jbe@211
 | 
    19 COMMENT ON COLUMN "policy"."voting_time"       IS 'Duration of issue state ''voting''; Time after an issue is "fully_frozen" but not "closed" (duration of issue state ''voting'')';
 | 
| 
jbe@211
 | 
    20 COMMENT ON COLUMN "policy"."issue_quorum_num"  IS   'Numerator of potential supporter quorum to be reached by one initiative of an issue to be "accepted" and enter issue state ''discussion''';
 | 
| 
jbe@211
 | 
    21 COMMENT ON COLUMN "policy"."issue_quorum_den"  IS 'Denominator of potential supporter quorum to be reached by one initiative of an issue to be "accepted" and enter issue state ''discussion''';
 | 
| 
jbe@211
 | 
    22 
 | 
| 
jbe@212
 | 
    23 -- change comment in "unit" table:
 | 
| 
jbe@212
 | 
    24 COMMENT ON COLUMN "unit"."active" IS 'TRUE means new issues can be created in areas of this unit';
 | 
| 
jbe@211
 | 
    25 
 | 
| 
jbe@212
 | 
    26 -- new table "unit_setting":
 | 
| 
jbe@211
 | 
    27 CREATE TABLE "unit_setting" (
 | 
| 
jbe@211
 | 
    28         PRIMARY KEY ("member_id", "key", "unit_id"),
 | 
| 
jbe@211
 | 
    29         "member_id"             INT4            REFERENCES "member" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
 | 
| 
jbe@211
 | 
    30         "key"                   TEXT            NOT NULL,
 | 
| 
jbe@211
 | 
    31         "unit_id"               INT4            REFERENCES "unit" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
 | 
| 
jbe@211
 | 
    32         "value"                 TEXT            NOT NULL );
 | 
| 
jbe@211
 | 
    33 COMMENT ON TABLE "unit_setting" IS 'Place for frontend to store unit specific settings of members as strings';
 | 
| 
jbe@211
 | 
    34 
 | 
| 
jbe@212
 | 
    35 -- change comments in "initiative" table:
 | 
| 
jbe@212
 | 
    36 COMMENT ON COLUMN "initiative"."revoked"           IS 'Point in time, when one initiator decided to revoke the initiative';
 | 
| 
jbe@212
 | 
    37 COMMENT ON COLUMN "initiative"."reverse_beat_path" IS 'TRUE, if there is a beat path (may include ties) from this initiative to the status quo';
 | 
| 
jbe@212
 | 
    38 COMMENT ON COLUMN "initiative"."eligible"          IS 'Initiative has a "direct_majority" and an "indirect_majority", is "better_than_status_quo" and depending on selected policy the initiative has no "reverse_beat_path" or "multistage_majority"';
 | 
| 
jbe@211
 | 
    39 
 | 
| 
jbe@212
 | 
    40 -- change comments in "privilege" table:
 | 
| 
jbe@211
 | 
    41 COMMENT ON COLUMN "privilege"."admin_manager"        IS 'Grant/revoke admin privileges to/from other members';
 | 
| 
jbe@211
 | 
    42 COMMENT ON COLUMN "privilege"."unit_manager"         IS 'Create and disable sub units';
 | 
| 
jbe@211
 | 
    43 COMMENT ON COLUMN "privilege"."area_manager"         IS 'Create and disable areas and set area parameters';
 | 
| 
jbe@211
 | 
    44 COMMENT ON COLUMN "privilege"."voting_right_manager" IS 'Select which members are allowed to discuss and vote within the unit';
 | 
| 
jbe@211
 | 
    45 
 | 
| 
jbe@212
 | 
    46 -- add comment to "supporter" table:
 | 
| 
jbe@211
 | 
    47 COMMENT ON COLUMN "supporter"."issue_id" IS 'WARNING: No index: For selections use column "initiative_id" and join via table "initiative" where neccessary';
 | 
| 
jbe@211
 | 
    48 
 | 
| 
jbe@212
 | 
    49 -- add column "draft_id" to table "direct_supporter_snapshot":
 | 
| 
jbe@211
 | 
    50 ALTER TABLE "direct_supporter_snapshot" ADD COLUMN "draft_id" INT8;
 | 
| 
jbe@211
 | 
    51 UPDATE "direct_supporter_snapshot" SET "draft_id" = "supporter"."draft_id" FROM "supporter" WHERE "direct_supporter_snapshot"."initiative_id" = "supporter"."initiative_id" AND "direct_supporter_snapshot"."member_id" = "supporter"."member_id";
 | 
| 
jbe@211
 | 
    52 UPDATE "direct_supporter_snapshot" SET "draft_id" = "current_draft"."id" FROM "current_draft" WHERE "direct_supporter_snapshot"."initiative_id" = "current_draft"."initiative_id" AND "direct_supporter_snapshot"."draft_id" ISNULL;
 | 
| 
jbe@211
 | 
    53 ALTER TABLE "direct_supporter_snapshot" ADD FOREIGN KEY ("initiative_id", "draft_id") REFERENCES "draft" ("initiative_id", "id") ON DELETE NO ACTION ON UPDATE CASCADE;
 | 
| 
jbe@211
 | 
    54 ALTER TABLE "direct_supporter_snapshot" ALTER COLUMN "draft_id" SET NOT NULL;
 | 
| 
jbe@211
 | 
    55 
 | 
| 
jbe@212
 | 
    56 -- add comment to "direct_supporter_snapshot" table:
 | 
| 
jbe@212
 | 
    57 COMMENT ON COLUMN "direct_supporter_snapshot"."issue_id" IS 'WARNING: No index: For selections use column "initiative_id" and join via table "initiative" where neccessary';
 | 
| 
jbe@211
 | 
    58 
 | 
| 
jbe@212
 | 
    59 -- add comment to "vote" table:
 | 
| 
jbe@211
 | 
    60 COMMENT ON COLUMN "vote"."issue_id" IS 'WARNING: No index: For selections use column "initiative_id" and join via table "initiative" where neccessary';
 | 
| 
jbe@211
 | 
    61 
 | 
| 
jbe@212
 | 
    62 -- change function "create_interest_snapshot" to set "direct_supporter_snapshot"."draft_id":
 | 
| 
jbe@211
 | 
    63 CREATE OR REPLACE FUNCTION "create_interest_snapshot"
 | 
| 
jbe@211
 | 
    64   ( "issue_id_p" "issue"."id"%TYPE )
 | 
| 
jbe@211
 | 
    65   RETURNS VOID
 | 
| 
jbe@211
 | 
    66   LANGUAGE 'plpgsql' VOLATILE AS $$
 | 
| 
jbe@211
 | 
    67     DECLARE
 | 
| 
jbe@211
 | 
    68       "member_id_v" "member"."id"%TYPE;
 | 
| 
jbe@211
 | 
    69     BEGIN
 | 
| 
jbe@211
 | 
    70       DELETE FROM "direct_interest_snapshot"
 | 
| 
jbe@211
 | 
    71         WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@211
 | 
    72         AND "event" = 'periodic';
 | 
| 
jbe@211
 | 
    73       DELETE FROM "delegating_interest_snapshot"
 | 
| 
jbe@211
 | 
    74         WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@211
 | 
    75         AND "event" = 'periodic';
 | 
| 
jbe@211
 | 
    76       DELETE FROM "direct_supporter_snapshot"
 | 
| 
jbe@211
 | 
    77         WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@211
 | 
    78         AND "event" = 'periodic';
 | 
| 
jbe@211
 | 
    79       INSERT INTO "direct_interest_snapshot"
 | 
| 
jbe@211
 | 
    80         ("issue_id", "event", "member_id")
 | 
| 
jbe@211
 | 
    81         SELECT
 | 
| 
jbe@211
 | 
    82           "issue_id_p"  AS "issue_id",
 | 
| 
jbe@211
 | 
    83           'periodic'    AS "event",
 | 
| 
jbe@211
 | 
    84           "member"."id" AS "member_id"
 | 
| 
jbe@211
 | 
    85         FROM "issue"
 | 
| 
jbe@211
 | 
    86         JOIN "area" ON "issue"."area_id" = "area"."id"
 | 
| 
jbe@211
 | 
    87         JOIN "interest" ON "issue"."id" = "interest"."issue_id"
 | 
| 
jbe@211
 | 
    88         JOIN "member" ON "interest"."member_id" = "member"."id"
 | 
| 
jbe@211
 | 
    89         JOIN "privilege"
 | 
| 
jbe@211
 | 
    90           ON "privilege"."unit_id" = "area"."unit_id"
 | 
| 
jbe@211
 | 
    91           AND "privilege"."member_id" = "member"."id"
 | 
| 
jbe@211
 | 
    92         WHERE "issue"."id" = "issue_id_p"
 | 
| 
jbe@211
 | 
    93         AND "member"."active" AND "privilege"."voting_right";
 | 
| 
jbe@211
 | 
    94       FOR "member_id_v" IN
 | 
| 
jbe@211
 | 
    95         SELECT "member_id" FROM "direct_interest_snapshot"
 | 
| 
jbe@211
 | 
    96         WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@211
 | 
    97         AND "event" = 'periodic'
 | 
| 
jbe@211
 | 
    98       LOOP
 | 
| 
jbe@211
 | 
    99         UPDATE "direct_interest_snapshot" SET
 | 
| 
jbe@211
 | 
   100           "weight" = 1 +
 | 
| 
jbe@211
 | 
   101             "weight_of_added_delegations_for_interest_snapshot"(
 | 
| 
jbe@211
 | 
   102               "issue_id_p",
 | 
| 
jbe@211
 | 
   103               "member_id_v",
 | 
| 
jbe@211
 | 
   104               '{}'
 | 
| 
jbe@211
 | 
   105             )
 | 
| 
jbe@211
 | 
   106           WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@211
 | 
   107           AND "event" = 'periodic'
 | 
| 
jbe@211
 | 
   108           AND "member_id" = "member_id_v";
 | 
| 
jbe@211
 | 
   109       END LOOP;
 | 
| 
jbe@211
 | 
   110        INSERT INTO "direct_supporter_snapshot"
 | 
| 
jbe@211
 | 
   111         ( "issue_id", "initiative_id", "event", "member_id",
 | 
| 
jbe@211
 | 
   112           "draft_id", "informed", "satisfied" )
 | 
| 
jbe@211
 | 
   113         SELECT
 | 
| 
jbe@211
 | 
   114           "issue_id_p"            AS "issue_id",
 | 
| 
jbe@211
 | 
   115           "initiative"."id"       AS "initiative_id",
 | 
| 
jbe@211
 | 
   116           'periodic'              AS "event",
 | 
| 
jbe@211
 | 
   117           "supporter"."member_id" AS "member_id",
 | 
| 
jbe@211
 | 
   118           "supporter"."draft_id"  AS "draft_id",
 | 
| 
jbe@211
 | 
   119           "supporter"."draft_id" = "current_draft"."id" AS "informed",
 | 
| 
jbe@211
 | 
   120           NOT EXISTS (
 | 
| 
jbe@211
 | 
   121             SELECT NULL FROM "critical_opinion"
 | 
| 
jbe@211
 | 
   122             WHERE "initiative_id" = "initiative"."id"
 | 
| 
jbe@211
 | 
   123             AND "member_id" = "supporter"."member_id"
 | 
| 
jbe@211
 | 
   124           ) AS "satisfied"
 | 
| 
jbe@211
 | 
   125         FROM "initiative"
 | 
| 
jbe@211
 | 
   126         JOIN "supporter"
 | 
| 
jbe@211
 | 
   127         ON "supporter"."initiative_id" = "initiative"."id"
 | 
| 
jbe@211
 | 
   128         JOIN "current_draft"
 | 
| 
jbe@211
 | 
   129         ON "initiative"."id" = "current_draft"."initiative_id"
 | 
| 
jbe@211
 | 
   130         JOIN "direct_interest_snapshot"
 | 
| 
jbe@211
 | 
   131         ON "supporter"."member_id" = "direct_interest_snapshot"."member_id"
 | 
| 
jbe@211
 | 
   132         AND "initiative"."issue_id" = "direct_interest_snapshot"."issue_id"
 | 
| 
jbe@211
 | 
   133         AND "event" = 'periodic'
 | 
| 
jbe@211
 | 
   134         WHERE "initiative"."issue_id" = "issue_id_p";
 | 
| 
jbe@211
 | 
   135       RETURN;
 | 
| 
jbe@211
 | 
   136     END;
 | 
| 
jbe@211
 | 
   137   $$;
 | 
| 
jbe@211
 | 
   138 
 | 
| 
jbe@212
 | 
   139 -- change function "delete_private_data" to delete invite codes in "member" instead of "invite_code" table:
 | 
| 
jbe@211
 | 
   140 CREATE OR REPLACE FUNCTION "delete_private_data"()
 | 
| 
jbe@211
 | 
   141   RETURNS VOID
 | 
| 
jbe@211
 | 
   142   LANGUAGE 'plpgsql' VOLATILE AS $$
 | 
| 
jbe@211
 | 
   143     BEGIN
 | 
| 
jbe@211
 | 
   144       UPDATE "member" SET
 | 
| 
jbe@211
 | 
   145         "invite_code"                  = NULL,
 | 
| 
jbe@211
 | 
   146         "last_login"                   = NULL,
 | 
| 
jbe@211
 | 
   147         "login"                        = NULL,
 | 
| 
jbe@211
 | 
   148         "password"                     = NULL,
 | 
| 
jbe@211
 | 
   149         "notify_email"                 = NULL,
 | 
| 
jbe@211
 | 
   150         "notify_email_unconfirmed"     = NULL,
 | 
| 
jbe@211
 | 
   151         "notify_email_secret"          = NULL,
 | 
| 
jbe@211
 | 
   152         "notify_email_secret_expiry"   = NULL,
 | 
| 
jbe@211
 | 
   153         "notify_email_lock_expiry"     = NULL,
 | 
| 
jbe@211
 | 
   154         "password_reset_secret"        = NULL,
 | 
| 
jbe@211
 | 
   155         "password_reset_secret_expiry" = NULL,
 | 
| 
jbe@211
 | 
   156         "organizational_unit"          = NULL,
 | 
| 
jbe@211
 | 
   157         "internal_posts"               = NULL,
 | 
| 
jbe@211
 | 
   158         "realname"                     = NULL,
 | 
| 
jbe@211
 | 
   159         "birthday"                     = NULL,
 | 
| 
jbe@211
 | 
   160         "address"                      = NULL,
 | 
| 
jbe@211
 | 
   161         "email"                        = NULL,
 | 
| 
jbe@211
 | 
   162         "xmpp_address"                 = NULL,
 | 
| 
jbe@211
 | 
   163         "website"                      = NULL,
 | 
| 
jbe@211
 | 
   164         "phone"                        = NULL,
 | 
| 
jbe@211
 | 
   165         "mobile_phone"                 = NULL,
 | 
| 
jbe@211
 | 
   166         "profession"                   = NULL,
 | 
| 
jbe@211
 | 
   167         "external_memberships"         = NULL,
 | 
| 
jbe@211
 | 
   168         "external_posts"               = NULL,
 | 
| 
jbe@211
 | 
   169         "statement"                    = NULL;
 | 
| 
jbe@211
 | 
   170       -- "text_search_data" is updated by triggers
 | 
| 
jbe@211
 | 
   171       DELETE FROM "setting";
 | 
| 
jbe@211
 | 
   172       DELETE FROM "setting_map";
 | 
| 
jbe@211
 | 
   173       DELETE FROM "member_relation_setting";
 | 
| 
jbe@211
 | 
   174       DELETE FROM "member_image";
 | 
| 
jbe@211
 | 
   175       DELETE FROM "contact";
 | 
| 
jbe@211
 | 
   176       DELETE FROM "ignored_member";
 | 
| 
jbe@211
 | 
   177       DELETE FROM "area_setting";
 | 
| 
jbe@211
 | 
   178       DELETE FROM "issue_setting";
 | 
| 
jbe@211
 | 
   179       DELETE FROM "ignored_initiative";
 | 
| 
jbe@211
 | 
   180       DELETE FROM "initiative_setting";
 | 
| 
jbe@211
 | 
   181       DELETE FROM "suggestion_setting";
 | 
| 
jbe@211
 | 
   182       DELETE FROM "non_voter";
 | 
| 
jbe@211
 | 
   183       DELETE FROM "direct_voter" USING "issue"
 | 
| 
jbe@211
 | 
   184         WHERE "direct_voter"."issue_id" = "issue"."id"
 | 
| 
jbe@211
 | 
   185         AND "issue"."closed" ISNULL;
 | 
| 
jbe@211
 | 
   186       RETURN;
 | 
| 
jbe@211
 | 
   187     END;
 | 
| 
jbe@211
 | 
   188   $$;
 | 
| 
jbe@211
 | 
   189 
 | 
| 
jbe@205
 | 
   190 COMMIT;
 |