|
@@ -42,6 +42,90 @@ new_process_format = {
|
|
|
|
|
|
}
|
|
|
|
|
|
+-- initialize values
|
|
|
+function init_consent(policy) {
|
|
|
+ self.start_time = os.time()
|
|
|
+ self.member_count = modpol.orgs.get_org(self.org_id):get_member_count()
|
|
|
+
|
|
|
+ if policy.duration then
|
|
|
+ register_callback(self.start_time + policy.duration)
|
|
|
+ end
|
|
|
+
|
|
|
+ if (duration and (consent_ratio or yes_threshold or no_threshold)) or (yes_threshold) or (consent_ratio) then
|
|
|
+ -- well formed policy
|
|
|
+ else
|
|
|
+ -- invalid
|
|
|
+ end
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+-- update vote count
|
|
|
+function update_consent(user, approve) {
|
|
|
+ if approve then
|
|
|
+ table.insert(yes_votes, user)
|
|
|
+ else
|
|
|
+ table.insert(no_votes, user)
|
|
|
+
|
|
|
+ if not duration then
|
|
|
+ eval_consent()
|
|
|
+ end
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+-- evaluate state of vote
|
|
|
+function eval_consent() {
|
|
|
+ consent_ratio = #yes_votes / (#yes_votes + #no_votes)
|
|
|
+ quorum = (#yes_votes + #no_votes) / member_count
|
|
|
+
|
|
|
+ if policy.duration then
|
|
|
+
|
|
|
+ if policy.consent_ratio then
|
|
|
+ if policy.quorum then
|
|
|
+ if quorum < policy.quorum then
|
|
|
+ fail()
|
|
|
+ end
|
|
|
+ end
|
|
|
+ if consent_ratio >= policy.consent_ratio then
|
|
|
+ pass()
|
|
|
+ else
|
|
|
+ fail()
|
|
|
+ end
|
|
|
+
|
|
|
+ elseif policy.yes_threshold then
|
|
|
+ if #yes_votes >= policy.yes_threshold then
|
|
|
+ pass()
|
|
|
+ else
|
|
|
+ fail()
|
|
|
+ end
|
|
|
+
|
|
|
+ elseif policy.no_threshold then
|
|
|
+ if #no_votes <= policy.no_threshold then
|
|
|
+ fail()
|
|
|
+ else
|
|
|
+ pass()
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ elseif policy.yes_threshold then
|
|
|
+ if policy.no_threshold then
|
|
|
+ if #no_votes >= policy.no_threshold then
|
|
|
+ fail()
|
|
|
+ end
|
|
|
+ if #yes_votes >= policy.yes_threshold then
|
|
|
+ pass()
|
|
|
+ end
|
|
|
+
|
|
|
+ elseif policy.consent_ratio and policy.quorum then
|
|
|
+ if quorum >= policy.quorum then
|
|
|
+ if consent_ratio >= policy.consent_ratio then
|
|
|
+ pass()
|
|
|
+ else
|
|
|
+ fail()
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+}
|
|
|
|
|
|
|
|
|
policy_table_format = {
|