# HG changeset patch # User jbe # Date 1345412257 -7200 # Node ID 2301a1f2acfa7343f54d05a7a932846b4bb55e15 # Parent f2292b94fc589ddc5d2645f6bc4d51847b7df4f0 Modified function "forbid_changes_on_closed_issue_trigger" to allow voting comments to be changed after voting has finished diff -r f2292b94fc58 -r 2301a1f2acfa core.sql --- a/core.sql Sun Aug 19 23:32:26 2012 +0200 +++ b/core.sql Sun Aug 19 23:37:37 2012 +0200 @@ -1576,6 +1576,15 @@ "issue_id_v" "issue"."id"%TYPE; "issue_row" "issue"%ROWTYPE; BEGIN + IF TG_RELID = 'direct_voter'::regclass AND TG_OP = 'UPDATE' THEN + IF + OLD."issue_id" = NEW."issue_id" AND + OLD."member_id" = NEW."member_id" AND + OLD."weight" = NEW."weight" + THEN + RETURN NULL; -- allows changing of voter comment + END IF; + END IF; IF TG_OP = 'DELETE' THEN "issue_id_v" := OLD."issue_id"; ELSE diff -r f2292b94fc58 -r 2301a1f2acfa update/core-update.v2.0.11-v2.1.0.sql --- a/update/core-update.v2.0.11-v2.1.0.sql Sun Aug 19 23:32:26 2012 +0200 +++ b/update/core-update.v2.0.11-v2.1.0.sql Sun Aug 19 23:37:37 2012 +0200 @@ -161,6 +161,36 @@ COMMENT ON FUNCTION "voter_comment_fields_only_set_when_voter_comment_is_set_trigger"() IS 'Implementation of trigger "voter_comment_fields_only_set_when_voter_comment_is_set" ON table "direct_voter"'; COMMENT ON TRIGGER "voter_comment_fields_only_set_when_voter_comment_is_set" ON "direct_voter" IS 'If "comment" is set to NULL, then other comment related fields are also set to NULL.'; +CREATE OR REPLACE FUNCTION "forbid_changes_on_closed_issue_trigger"() + RETURNS TRIGGER + LANGUAGE 'plpgsql' VOLATILE AS $$ + DECLARE + "issue_id_v" "issue"."id"%TYPE; + "issue_row" "issue"%ROWTYPE; + BEGIN + IF TG_RELID = 'direct_voter'::regclass AND TG_OP = 'UPDATE' THEN + IF + OLD."issue_id" = NEW."issue_id" AND + OLD."member_id" = NEW."member_id" AND + OLD."weight" = NEW."weight" + THEN + RETURN NULL; -- allows changing of voter comment + END IF; + END IF; + IF TG_OP = 'DELETE' THEN + "issue_id_v" := OLD."issue_id"; + ELSE + "issue_id_v" := NEW."issue_id"; + END IF; + SELECT INTO "issue_row" * FROM "issue" + WHERE "id" = "issue_id_v" FOR SHARE; + IF "issue_row"."closed" NOTNULL THEN + RAISE EXCEPTION 'Tried to modify data belonging to a closed issue.'; + END IF; + RETURN NULL; + END; + $$; + CREATE OR REPLACE FUNCTION "close_voting"("issue_id_p" "issue"."id"%TYPE) RETURNS VOID LANGUAGE 'plpgsql' VOLATILE AS $$