liquid_feedback_frontend
view model/interest.lua @ 1847:bcfa66dd8980
Added version numbers
| author | bsw | 
|---|---|
| date | Thu Feb 03 16:07:59 2022 +0100 (2022-02-03) | 
| parents | 2f9e1e882de6 | 
| children | 
 line source
     1 Interest = mondelefant.new_class()
     2 Interest.table = 'interest'
     3 Interest.primary_key = { "issue_id", "member_id" }
     4 Interest:add_reference{
     5   mode          = 'm1',
     6   to            = "Member",
     7   this_key      = 'member_id',
     8   that_key      = 'id',
     9   ref           = 'member',
    10 }
    12 Interest:add_reference{
    13   mode          = 'm1',
    14   to            = "Issue",
    15   this_key      = 'issue_id',
    16   that_key      = 'id',
    17   ref           = 'issue',
    18 }
    20 function Interest:by_pk(issue_id, member_id)
    21   return self:new_selector()
    22     :add_where{ "issue_id = ? AND member_id = ?", issue_id, member_id }
    23     :optional_object_mode()
    24     :exec()
    25 end
    27 function Interest:update(issue_id, member, interested)
    28   local interest = Interest:by_pk(issue_id, member.id)
    30   local issue = Issue:new_selector():add_where{ "id = ?", issue_id }:for_share():single_object_mode():exec()
    32   if not member:has_voting_right_for_unit_id(issue.area.unit_id) then
    33     return execute.view { module = "index", view = "403" }
    34   end
    36   if issue.closed then
    37     slot.put_into("error", _"This issue is already closed.")
    38     return false
    39   elseif issue.fully_frozen then 
    40     slot.put_into("error", _"Voting for this issue has already begun.")
    41     return false
    42   elseif 
    43     (issue.half_frozen and issue.phase_finished) or
    44     (not issue.accepted and issue.phase_finished) 
    45   then
    46     slot.put_into("error", _"Current phase is already closed.")
    47     return false
    48   end
    50   if interested == false then
    51     if interest then
    52       interest:destroy()
    53     end
    54     return true
    55   end
    57   if not interest then
    58     interest = Interest:new()
    59     interest.issue_id   = issue_id
    60     interest.member_id  = app.session.member_id
    61     interest:save()
    62   end
    64   return true
    66 end
