liquid_feedback_core

view update/core-update.v1.0.3-v1.1.0.sql @ 142:54ac8c473263

Use an improved definition for "disqualified" initiatives

"initiative"."disqualified" is TRUE, if the initiative may not win, because it either (a) has no better rank than the status quo, or (b) because there exists a better ranked initiative X, which directly beats this initiative, and either more voters prefer X to this initiative than voters preferring X to the status quo or less voters prefer this initiative to X than voters preferring the status quo to X
author jbe
date Wed Jun 01 16:58:00 2011 +0200 (2011-06-01)
parents b63515611a60
children
line source
1 BEGIN;
3 CREATE OR REPLACE VIEW "liquid_feedback_version" AS
4 SELECT * FROM (VALUES ('1.1.0', 1, 1, 0))
5 AS "subquery"("string", "major", "minor", "revision");
7 ALTER TABLE "member" ADD COLUMN "notify_email_lock_expiry" TIMESTAMPTZ;
8 COMMENT ON COLUMN "member"."notify_email_lock_expiry" IS 'Date/time until no further email confirmation mails may be sent (abuse protection)';
10 ALTER TABLE "direct_population_snapshot" DROP COLUMN "interest_exists";
12 CREATE OR REPLACE FUNCTION "create_population_snapshot"
13 ( "issue_id_p" "issue"."id"%TYPE )
14 RETURNS VOID
15 LANGUAGE 'plpgsql' VOLATILE AS $$
16 DECLARE
17 "member_id_v" "member"."id"%TYPE;
18 BEGIN
19 DELETE FROM "direct_population_snapshot"
20 WHERE "issue_id" = "issue_id_p"
21 AND "event" = 'periodic';
22 DELETE FROM "delegating_population_snapshot"
23 WHERE "issue_id" = "issue_id_p"
24 AND "event" = 'periodic';
25 INSERT INTO "direct_population_snapshot"
26 ("issue_id", "event", "member_id")
27 SELECT
28 "issue_id_p" AS "issue_id",
29 'periodic'::"snapshot_event" AS "event",
30 "member"."id" AS "member_id"
31 FROM "issue"
32 JOIN "area" ON "issue"."area_id" = "area"."id"
33 JOIN "membership" ON "area"."id" = "membership"."area_id"
34 JOIN "member" ON "membership"."member_id" = "member"."id"
35 WHERE "issue"."id" = "issue_id_p"
36 AND "member"."active"
37 UNION
38 SELECT
39 "issue_id_p" AS "issue_id",
40 'periodic'::"snapshot_event" AS "event",
41 "member"."id" AS "member_id"
42 FROM "interest" JOIN "member"
43 ON "interest"."member_id" = "member"."id"
44 WHERE "interest"."issue_id" = "issue_id_p"
45 AND "member"."active";
46 FOR "member_id_v" IN
47 SELECT "member_id" FROM "direct_population_snapshot"
48 WHERE "issue_id" = "issue_id_p"
49 AND "event" = 'periodic'
50 LOOP
51 UPDATE "direct_population_snapshot" SET
52 "weight" = 1 +
53 "weight_of_added_delegations_for_population_snapshot"(
54 "issue_id_p",
55 "member_id_v",
56 '{}'
57 )
58 WHERE "issue_id" = "issue_id_p"
59 AND "event" = 'periodic'
60 AND "member_id" = "member_id_v";
61 END LOOP;
62 RETURN;
63 END;
64 $$;
66 COMMENT ON FUNCTION "freeze_after_snapshot"
67 ( "issue"."id"%TYPE )
68 IS 'This function freezes an issue (fully) and starts voting, but must only be called when "create_snapshot" was called in the same transaction.';
70 COMMENT ON FUNCTION "manual_freeze"
71 ( "issue"."id"%TYPE )
72 IS 'Freeze an issue manually (fully) and start voting';
74 DROP FUNCTION "delete_member_data"("member"."id"%TYPE);
76 CREATE FUNCTION "delete_member"("member_id_p" "member"."id"%TYPE)
77 RETURNS VOID
78 LANGUAGE 'plpgsql' VOLATILE AS $$
79 BEGIN
80 UPDATE "member" SET
81 "login" = NULL,
82 "password" = NULL,
83 "active" = FALSE,
84 "notify_email" = NULL,
85 "notify_email_unconfirmed" = NULL,
86 "notify_email_secret" = NULL,
87 "notify_email_secret_expiry" = NULL,
88 "password_reset_secret" = NULL,
89 "password_reset_secret_expiry" = NULL,
90 "organizational_unit" = NULL,
91 "internal_posts" = NULL,
92 "realname" = NULL,
93 "birthday" = NULL,
94 "address" = NULL,
95 "email" = NULL,
96 "xmpp_address" = NULL,
97 "website" = NULL,
98 "phone" = NULL,
99 "mobile_phone" = NULL,
100 "profession" = NULL,
101 "external_memberships" = NULL,
102 "external_posts" = NULL,
103 "statement" = NULL
104 WHERE "id" = "member_id_p";
105 -- "text_search_data" is updated by triggers
106 UPDATE "member_history" SET "login" = NULL
107 WHERE "member_id" = "member_id_p";
108 DELETE FROM "setting" WHERE "member_id" = "member_id_p";
109 DELETE FROM "setting_map" WHERE "member_id" = "member_id_p";
110 DELETE FROM "member_relation_setting" WHERE "member_id" = "member_id_p";
111 DELETE FROM "member_image" WHERE "member_id" = "member_id_p";
112 DELETE FROM "contact" WHERE "member_id" = "member_id_p";
113 DELETE FROM "area_setting" WHERE "member_id" = "member_id_p";
114 DELETE FROM "issue_setting" WHERE "member_id" = "member_id_p";
115 DELETE FROM "initiative_setting" WHERE "member_id" = "member_id_p";
116 DELETE FROM "suggestion_setting" WHERE "member_id" = "member_id_p";
117 DELETE FROM "membership" WHERE "member_id" = "member_id_p";
118 DELETE FROM "delegation" WHERE "truster_id" = "member_id_p";
119 RETURN;
120 END;
121 $$;
123 COMMENT ON FUNCTION "delete_member"("member_id_p" "member"."id"%TYPE) IS 'Clear certain settings and data of a particular member (data protection)';
125 CREATE OR REPLACE FUNCTION "delete_private_data"()
126 RETURNS VOID
127 LANGUAGE 'plpgsql' VOLATILE AS $$
128 BEGIN
129 UPDATE "member" SET
130 "login" = NULL,
131 "password" = NULL,
132 "notify_email" = NULL,
133 "notify_email_unconfirmed" = NULL,
134 "notify_email_secret" = NULL,
135 "notify_email_secret_expiry" = NULL,
136 "password_reset_secret" = NULL,
137 "password_reset_secret_expiry" = NULL,
138 "organizational_unit" = NULL,
139 "internal_posts" = NULL,
140 "realname" = NULL,
141 "birthday" = NULL,
142 "address" = NULL,
143 "email" = NULL,
144 "xmpp_address" = NULL,
145 "website" = NULL,
146 "phone" = NULL,
147 "mobile_phone" = NULL,
148 "profession" = NULL,
149 "external_memberships" = NULL,
150 "external_posts" = NULL,
151 "statement" = NULL;
152 -- "text_search_data" is updated by triggers
153 UPDATE "member_history" SET "login" = NULL;
154 DELETE FROM "invite_code";
155 DELETE FROM "setting";
156 DELETE FROM "setting_map";
157 DELETE FROM "member_relation_setting";
158 DELETE FROM "member_image";
159 DELETE FROM "contact";
160 DELETE FROM "session";
161 DELETE FROM "area_setting";
162 DELETE FROM "issue_setting";
163 DELETE FROM "initiative_setting";
164 DELETE FROM "suggestion_setting";
165 DELETE FROM "direct_voter" USING "issue"
166 WHERE "direct_voter"."issue_id" = "issue"."id"
167 AND "issue"."closed" ISNULL;
168 RETURN;
169 END;
170 $$;
172 COMMIT;

Impressum / About Us