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