liquid_feedback_frontend
diff model/interest.lua @ 1618:2f9e1e882de6
Add/remove interest via fetch
| author | bsw |
|---|---|
| date | Mon Feb 01 23:43:54 2021 +0100 (2021-02-01) |
| parents | 3bfb2fcf7ab9 |
| children |
line diff
1.1 --- a/model/interest.lua Mon Feb 01 21:57:34 2021 +0100 1.2 +++ b/model/interest.lua Mon Feb 01 23:43:54 2021 +0100 1.3 @@ -22,4 +22,45 @@ 1.4 :add_where{ "issue_id = ? AND member_id = ?", issue_id, member_id } 1.5 :optional_object_mode() 1.6 :exec() 1.7 -end 1.8 \ No newline at end of file 1.9 +end 1.10 + 1.11 +function Interest:update(issue_id, member, interested) 1.12 + local interest = Interest:by_pk(issue_id, member.id) 1.13 + 1.14 + local issue = Issue:new_selector():add_where{ "id = ?", issue_id }:for_share():single_object_mode():exec() 1.15 + 1.16 + if not member:has_voting_right_for_unit_id(issue.area.unit_id) then 1.17 + return execute.view { module = "index", view = "403" } 1.18 + end 1.19 + 1.20 + if issue.closed then 1.21 + slot.put_into("error", _"This issue is already closed.") 1.22 + return false 1.23 + elseif issue.fully_frozen then 1.24 + slot.put_into("error", _"Voting for this issue has already begun.") 1.25 + return false 1.26 + elseif 1.27 + (issue.half_frozen and issue.phase_finished) or 1.28 + (not issue.accepted and issue.phase_finished) 1.29 + then 1.30 + slot.put_into("error", _"Current phase is already closed.") 1.31 + return false 1.32 + end 1.33 + 1.34 + if interested == false then 1.35 + if interest then 1.36 + interest:destroy() 1.37 + end 1.38 + return true 1.39 + end 1.40 + 1.41 + if not interest then 1.42 + interest = Interest:new() 1.43 + interest.issue_id = issue_id 1.44 + interest.member_id = app.session.member_id 1.45 + interest:save() 1.46 + end 1.47 + 1.48 + return true 1.49 + 1.50 +end