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