liquid_feedback_frontend
view model/member.lua @ 5:afd9f769c7ae
Version beta1
Final voting with Schulze-Method is now possible
Many bug fixes and code cleanup
Registration with invite codes
More sort and filter options
Seperated display of "supporters" and "potential supporters"
Optical changes
Flood limit / initiative contigent is now checked by frontend
Neccessary changes to access core beta11
Final voting with Schulze-Method is now possible
Many bug fixes and code cleanup
Registration with invite codes
More sort and filter options
Seperated display of "supporters" and "potential supporters"
Optical changes
Flood limit / initiative contigent is now checked by frontend
Neccessary changes to access core beta11
| author | bsw/jbe | 
|---|---|
| date | Fri Dec 25 12:00:00 2009 +0100 (2009-12-25) | 
| parents | 80c215dbf076 | 
| children | 8d91bccab0bf | 
 line source
     1 Member = mondelefant.new_class()
     2 Member.table = 'member'
     4 Member:add_reference{
     5   mode          = '1m',
     6   to            = "MemberImage",
     7   this_key      = 'id',
     8   that_key      = 'member_id',
     9   ref           = 'images',
    10   back_ref      = 'member'
    11 }
    13 Member:add_reference{
    14   mode          = '1m',
    15   to            = "Contact",
    16   this_key      = 'id',
    17   that_key      = 'member_id',
    18   ref           = 'contacts',
    19   back_ref      = 'member',
    20   default_order = '"other_member_id"'
    21 }
    23 Member:add_reference{
    24   mode          = '1m',
    25   to            = "Contact",
    26   this_key      = 'id',
    27   that_key      = 'member_id',
    28   ref           = 'foreign_contacts',
    29   back_ref      = 'other_member',
    30   default_order = '"member_id"'
    31 }
    33 Member:add_reference{
    34   mode          = '1m',
    35   to            = "Session",
    36   this_key      = 'id',
    37   that_key      = 'member_id',
    38   ref           = 'sessions',
    39   back_ref      = 'member',
    40   default_order = '"ident"'
    41 }
    43 Member:add_reference{
    44   mode          = '1m',
    45   to            = "Draft",
    46   this_key      = 'id',
    47   that_key      = 'author_id',
    48   ref           = 'drafts',
    49   back_ref      = 'author',
    50   default_order = '"id"'
    51 }
    53 Member:add_reference{
    54   mode          = '1m',
    55   to            = "Suggestion",
    56   this_key      = 'id',
    57   that_key      = 'author_id',
    58   ref           = 'suggestions',
    59   back_ref      = 'author',
    60   default_order = '"id"'
    61 }
    63 Member:add_reference{
    64   mode          = '1m',
    65   to            = "Membership",
    66   this_key      = 'id',
    67   that_key      = 'member_id',
    68   ref           = 'memberships',
    69   back_ref      = 'member',
    70   default_order = '"area_id"'
    71 }
    73 Member:add_reference{
    74   mode          = '1m',
    75   to            = "Interest",
    76   this_key      = 'id',
    77   that_key      = 'member_id',
    78   ref           = 'interests',
    79   back_ref      = 'member',
    80   default_order = '"id"'
    81 }
    83 Member:add_reference{
    84   mode          = '1m',
    85   to            = "Initiator",
    86   this_key      = 'id',
    87   that_key      = 'member_id',
    88   ref           = 'initiators',
    89   back_ref      = 'member',
    90   default_order = '"id"'
    91 }
    93 Member:add_reference{
    94   mode          = '1m',
    95   to            = "Supporter",
    96   this_key      = 'id',
    97   that_key      = 'member_id',
    98   ref           = 'supporters',
    99   back_ref      = 'member'
   100 }
   102 Member:add_reference{
   103   mode          = '1m',
   104   to            = "Opinion",
   105   this_key      = 'id',
   106   that_key      = 'member_id',
   107   ref           = 'opinions',
   108   back_ref      = 'member',
   109   default_order = '"id"'
   110 }
   112 Member:add_reference{
   113   mode          = '1m',
   114   to            = "Delegation",
   115   this_key      = 'id',
   116   that_key      = 'truster_id',
   117   ref           = 'outgoing_delegations',
   118   back_ref      = 'truster',
   119   default_order = '"id"'
   120 }
   122 Member:add_reference{
   123   mode          = '1m',
   124   to            = "Delegation",
   125   this_key      = 'id',
   126   that_key      = 'trustee_id',
   127   ref           = 'incoming_delegations',
   128   back_ref      = 'trustee',
   129   default_order = '"id"'
   130 }
   132 Member:add_reference{
   133   mode          = '1m',
   134   to            = "DirectVoter",
   135   this_key      = 'id',
   136   that_key      = 'member_id',
   137   ref           = 'direct_voter',
   138   back_ref      = 'member',
   139   default_order = '"issue_id"'
   140 }
   142 Member:add_reference{
   143   mode          = '1m',
   144   to            = "Vote",
   145   this_key      = 'id',
   146   that_key      = 'member_id',
   147   ref           = 'vote',
   148   back_ref      = 'member',
   149   default_order = '"issue_id", "initiative_id"'
   150 }
   152 Member:add_reference{
   153   mode                  = 'mm',
   154   to                    = "Member",
   155   this_key              = 'id',
   156   that_key              = 'id',
   157   connected_by_table    = 'contact',
   158   connected_by_this_key = 'member_id',
   159   connected_by_that_key = 'other_member_id',
   160   ref                   = 'saved_members',
   161 }
   163 Member:add_reference{
   164   mode                  = 'mm',
   165   to                    = "Member",
   166   this_key              = 'id',
   167   that_key              = 'id',
   168   connected_by_table    = 'contact',
   169   connected_by_this_key = 'other_member_id',
   170   connected_by_that_key = 'member_id',
   171   ref                   = 'saved_by_members',
   172 }
   174 Member:add_reference{
   175   mode                  = 'mm',
   176   to                    = "Area",
   177   this_key              = 'id',
   178   that_key              = 'id',
   179   connected_by_table    = 'membership',
   180   connected_by_this_key = 'member_id',
   181   connected_by_that_key = 'area_id',
   182   ref                   = 'areas'
   183 }
   185 Member:add_reference{
   186   mode                  = 'mm',
   187   to                    = "Issue",
   188   this_key              = 'id',
   189   that_key              = 'id',
   190   connected_by_table    = 'interest',
   191   connected_by_this_key = 'member_id',
   192   connected_by_that_key = 'issue_id',
   193   ref                   = 'issues'
   194 }
   196 Member:add_reference{
   197   mode                  = 'mm',
   198   to                    = "Initiative",
   199   this_key              = 'id',
   200   that_key              = 'id',
   201   connected_by_table    = 'initiator',
   202   connected_by_this_key = 'member_id',
   203   connected_by_that_key = 'initiative_id',
   204   ref                   = 'initiated_initiatives'
   205 }
   207 Member:add_reference{
   208   mode                  = 'mm',
   209   to                    = "Initiative",
   210   this_key              = 'id',
   211   that_key              = 'id',
   212   connected_by_table    = 'supporter',
   213   connected_by_this_key = 'member_id',
   214   connected_by_that_key = 'initiative_id',
   215   ref                   = 'supported_initiatives'
   216 }
   218 function Member.object:set_password(password)
   219   local hash = os.crypt(
   220     password,
   221     "$1$" .. multirand.string(
   222       8,
   223       "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./"
   224     )
   225   )
   226   assert(hash, "os.crypt failed")
   227   self.password = hash
   228 end
   230 function Member.object:check_password(password)
   231   if type(password) == "string" and type(self.password) == "string" then
   232     return os.crypt(password, self.password) == self.password
   233   else
   234     return false
   235   end
   236 end
   238 function Member.object_get:published_contacts()
   239   return Member:new_selector()
   240     :join('"contact"', nil, '"contact"."other_member_id" = "member"."id"')
   241     :add_where{ '"contact"."member_id" = ?', self.id }
   242     :add_where("public")
   243     :exec()
   244 end
   246 function Member:by_login_and_password(login, password)
   247   local selector = self:new_selector()
   248   selector:add_where{'"login" = ?', login }
   249   selector:add_where('"active"')
   250   selector:optional_object_mode()
   251   local member = selector:exec()
   252   if member and member:check_password(password) then
   253     return member
   254   else
   255     return nil
   256   end
   257 end
   259 function Member:by_login(login)
   260   local selector = self:new_selector()
   261   selector:add_where{'"login" = ?', login }
   262   selector:optional_object_mode()
   263   return selector:exec()
   264 end
   266 function Member:by_name(name)
   267   local selector = self:new_selector()
   268   selector:add_where{'"name" = ?', name }
   269   selector:optional_object_mode()
   270   return selector:exec()
   271 end
   273 function Member:get_search_selector(search_string)
   274   return self:new_selector()
   275     :add_field( {'"highlight"("member"."name", ?)', search_string }, "name_highlighted")
   276     :add_where{ '"member"."text_search_data" @@ "text_search_query"(?)', search_string }
   277     :add_where("active")
   278 end
