liquid_feedback_frontend
view model/member.lua @ 1:dd0109e81922
Version alpha2
Minor bug in bargraph output for suggestions fixed
Minor bug in bargraph output for suggestions fixed
| author | bsw | 
|---|---|
| date | Wed Nov 18 12:00:00 2009 +0100 (2009-11-18) | 
| parents | 3bfb2fcf7ab9 | 
| children | 5c601807d397 | 
 line source
     1 Member = mondelefant.new_class()
     2 Member.table = 'member'
     4 Member:add_reference{
     5   mode          = '1m',
     6   to            = "Contact",
     7   this_key      = 'id',
     8   that_key      = 'member_id',
     9   ref           = 'contacts',
    10   back_ref      = 'member',
    11   default_order = '"other_member_id"'
    12 }
    14 Member:add_reference{
    15   mode          = '1m',
    16   to            = "Contact",
    17   this_key      = 'id',
    18   that_key      = 'member_id',
    19   ref           = 'foreign_contacts',
    20   back_ref      = 'other_member',
    21   default_order = '"member_id"'
    22 }
    24 Member:add_reference{
    25   mode          = '1m',
    26   to            = "Session",
    27   this_key      = 'id',
    28   that_key      = 'member_id',
    29   ref           = 'sessions',
    30   back_ref      = 'member',
    31   default_order = '"ident"'
    32 }
    34 Member:add_reference{
    35   mode          = '1m',
    36   to            = "Draft",
    37   this_key      = 'id',
    38   that_key      = 'author_id',
    39   ref           = 'drafts',
    40   back_ref      = 'author',
    41   default_order = '"id"'
    42 }
    44 Member:add_reference{
    45   mode          = '1m',
    46   to            = "Suggestion",
    47   this_key      = 'id',
    48   that_key      = 'author_id',
    49   ref           = 'suggestions',
    50   back_ref      = 'author',
    51   default_order = '"id"'
    52 }
    54 Member:add_reference{
    55   mode          = '1m',
    56   to            = "Membership",
    57   this_key      = 'id',
    58   that_key      = 'member_id',
    59   ref           = 'memberships',
    60   back_ref      = 'member',
    61   default_order = '"area_id"'
    62 }
    64 Member:add_reference{
    65   mode          = '1m',
    66   to            = "Interest",
    67   this_key      = 'id',
    68   that_key      = 'member_id',
    69   ref           = 'interests',
    70   back_ref      = 'member',
    71   default_order = '"id"'
    72 }
    74 Member:add_reference{
    75   mode          = '1m',
    76   to            = "Initiator",
    77   this_key      = 'id',
    78   that_key      = 'member_id',
    79   ref           = 'initiators',
    80   back_ref      = 'member',
    81   default_order = '"id"'
    82 }
    84 Member:add_reference{
    85   mode          = '1m',
    86   to            = "Supporter",
    87   this_key      = 'id',
    88   that_key      = 'member_id',
    89   ref           = 'supporters',
    90   back_ref      = 'member',
    91   default_order = '"id"'
    92 }
    94 Member:add_reference{
    95   mode          = '1m',
    96   to            = "Opinion",
    97   this_key      = 'id',
    98   that_key      = 'member_id',
    99   ref           = 'opinions',
   100   back_ref      = 'member',
   101   default_order = '"id"'
   102 }
   104 Member:add_reference{
   105   mode          = '1m',
   106   to            = "Delegation",
   107   this_key      = 'id',
   108   that_key      = 'truster_id',
   109   ref           = 'outgoing_delegations',
   110   back_ref      = 'truster',
   111   default_order = '"id"'
   112 }
   114 Member:add_reference{
   115   mode          = '1m',
   116   to            = "Delegation",
   117   this_key      = 'id',
   118   that_key      = 'trustee_id',
   119   ref           = 'incoming_delegations',
   120   back_ref      = 'trustee',
   121   default_order = '"id"'
   122 }
   124 Member:add_reference{
   125   mode          = '1m',
   126   to            = "DirectVoter",
   127   this_key      = 'id',
   128   that_key      = 'member_id',
   129   ref           = 'direct_voter',
   130   back_ref      = 'member',
   131   default_order = '"issue_id"'
   132 }
   134 Member:add_reference{
   135   mode          = '1m',
   136   to            = "Vote",
   137   this_key      = 'id',
   138   that_key      = 'member_id',
   139   ref           = 'vote',
   140   back_ref      = 'member',
   141   default_order = '"issue_id", "initiative_id"'
   142 }
   144 Member:add_reference{
   145   mode                  = 'mm',
   146   to                    = "Member",
   147   this_key              = 'id',
   148   that_key              = 'id',
   149   connected_by_table    = 'contact',
   150   connected_by_this_key = 'member_id',
   151   connected_by_that_key = 'other_member_id',
   152   ref                   = 'saved_members',
   153 }
   155 Member:add_reference{
   156   mode                  = 'mm',
   157   to                    = "Member",
   158   this_key              = 'id',
   159   that_key              = 'id',
   160   connected_by_table    = 'contact',
   161   connected_by_this_key = 'other_member_id',
   162   connected_by_that_key = 'member_id',
   163   ref                   = 'saved_by_members',
   164 }
   166 Member:add_reference{
   167   mode                  = 'mm',
   168   to                    = "Area",
   169   this_key              = 'id',
   170   that_key              = 'id',
   171   connected_by_table    = 'membership',
   172   connected_by_this_key = 'member_id',
   173   connected_by_that_key = 'area_id',
   174   ref                   = 'areas'
   175 }
   177 Member:add_reference{
   178   mode                  = 'mm',
   179   to                    = "Issue",
   180   this_key              = 'id',
   181   that_key              = 'id',
   182   connected_by_table    = 'interest',
   183   connected_by_this_key = 'member_id',
   184   connected_by_that_key = 'issue_id',
   185   ref                   = 'issues'
   186 }
   188 Member:add_reference{
   189   mode                  = 'mm',
   190   to                    = "Initiative",
   191   this_key              = 'id',
   192   that_key              = 'id',
   193   connected_by_table    = 'initiator',
   194   connected_by_this_key = 'member_id',
   195   connected_by_that_key = 'initiative_id',
   196   ref                   = 'initiated_initiatives'
   197 }
   199 Member:add_reference{
   200   mode                  = 'mm',
   201   to                    = "Initiative",
   202   this_key              = 'id',
   203   that_key              = 'id',
   204   connected_by_table    = 'supporter',
   205   connected_by_this_key = 'member_id',
   206   connected_by_that_key = 'initiative_id',
   207   ref                   = 'supported_initiatives'
   208 }
   210 function Member.object:set_password(password)
   211   local hash = os.crypt(
   212     password,
   213     "$1$" .. multirand.string(
   214       8,
   215       "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./"
   216     )
   217   )
   218   assert(hash, "os.crypt failed")
   219   self.password = hash
   220 end
   222 function Member.object:check_password(password)
   223   if type(password) == "string" and type(self.password) == "string" then
   224     return os.crypt(password, self.password) == self.password
   225   else
   226     return false
   227   end
   228 end
   230 function Member.object_get:published_contacts()
   231   return Member:new_selector()
   232     :join('"contact"', nil, '"contact"."other_member_id" = "member"."id"')
   233     :add_where{ '"contact"."member_id" = ?', self.id }
   234     :add_where("public")
   235     :exec()
   236 end
   238 function Member:by_login_and_password(login, password)
   239   local selector = self:new_selector()
   240   selector:add_where{'"login" = ?', login, password }
   241   selector:add_where('"active"')
   242   selector:optional_object_mode()
   243   local member = selector:exec()
   244   if member and member:check_password(password) then
   245     return member
   246   else
   247     return nil
   248   end
   249 end
   251 function Member:search(search_string)
   252   return self:new_selector()
   253     :add_where{ '"member"."name" ILIKE ?', "%" .. search_string:gsub("%%", "") .. "%" }
   254     :add_where("active")
   255     :exec()
   256 end
