liquid_feedback_frontend
view model/member.lua @ 2:5c601807d397
Version alpha3
Dark green part of issue supporter bargraph represents all satisfied supporters, regardless of having seen the latest draft
Wiki formatting for drafts
Showing differences between two drafts of the same initiative
Display of outgoing delegation chains
Many other improvements
Dark green part of issue supporter bargraph represents all satisfied supporters, regardless of having seen the latest draft
Wiki formatting for drafts
Showing differences between two drafts of the same initiative
Display of outgoing delegation chains
Many other improvements
| author | bsw | 
|---|---|
| date | Mon Nov 23 12:00:00 2009 +0100 (2009-11-23) | 
| parents | 3bfb2fcf7ab9 | 
| children | 80c215dbf076 | 
 line source
     1 Member = mondelefant.new_class()
     2 Member.table = 'member'
     4 Member:add_reference{
     5   mode          = '11',
     6   to            = "MemberImage",
     7   this_key      = 'id',
     8   that_key      = 'member_id',
     9   ref           = 'image',
    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, password }
   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:get_search_selector(search_string)
   260   return self:new_selector()
   261     :add_field( {'"highlight"("member"."name", ?)', search_string }, "name_highlighted")
   262     :add_where{ '"member"."text_search_data" @@ "text_search_query"(?)', search_string }
   263     :add_where("active")
   264 end
