liquid_feedback_frontend

diff model/member.lua @ 0:3bfb2fcf7ab9

Version alpha1
author bsw/jbe
date Wed Nov 18 12:00:00 2009 +0100 (2009-11-18)
parents
children 5c601807d397
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/model/member.lua	Wed Nov 18 12:00:00 2009 +0100
     1.3 @@ -0,0 +1,256 @@
     1.4 +Member = mondelefant.new_class()
     1.5 +Member.table = 'member'
     1.6 +
     1.7 +Member:add_reference{
     1.8 +  mode          = '1m',
     1.9 +  to            = "Contact",
    1.10 +  this_key      = 'id',
    1.11 +  that_key      = 'member_id',
    1.12 +  ref           = 'contacts',
    1.13 +  back_ref      = 'member',
    1.14 +  default_order = '"other_member_id"'
    1.15 +}
    1.16 +
    1.17 +Member:add_reference{
    1.18 +  mode          = '1m',
    1.19 +  to            = "Contact",
    1.20 +  this_key      = 'id',
    1.21 +  that_key      = 'member_id',
    1.22 +  ref           = 'foreign_contacts',
    1.23 +  back_ref      = 'other_member',
    1.24 +  default_order = '"member_id"'
    1.25 +}
    1.26 +
    1.27 +Member:add_reference{
    1.28 +  mode          = '1m',
    1.29 +  to            = "Session",
    1.30 +  this_key      = 'id',
    1.31 +  that_key      = 'member_id',
    1.32 +  ref           = 'sessions',
    1.33 +  back_ref      = 'member',
    1.34 +  default_order = '"ident"'
    1.35 +}
    1.36 +
    1.37 +Member:add_reference{
    1.38 +  mode          = '1m',
    1.39 +  to            = "Draft",
    1.40 +  this_key      = 'id',
    1.41 +  that_key      = 'author_id',
    1.42 +  ref           = 'drafts',
    1.43 +  back_ref      = 'author',
    1.44 +  default_order = '"id"'
    1.45 +}
    1.46 +
    1.47 +Member:add_reference{
    1.48 +  mode          = '1m',
    1.49 +  to            = "Suggestion",
    1.50 +  this_key      = 'id',
    1.51 +  that_key      = 'author_id',
    1.52 +  ref           = 'suggestions',
    1.53 +  back_ref      = 'author',
    1.54 +  default_order = '"id"'
    1.55 +}
    1.56 +
    1.57 +Member:add_reference{
    1.58 +  mode          = '1m',
    1.59 +  to            = "Membership",
    1.60 +  this_key      = 'id',
    1.61 +  that_key      = 'member_id',
    1.62 +  ref           = 'memberships',
    1.63 +  back_ref      = 'member',
    1.64 +  default_order = '"area_id"'
    1.65 +}
    1.66 +
    1.67 +Member:add_reference{
    1.68 +  mode          = '1m',
    1.69 +  to            = "Interest",
    1.70 +  this_key      = 'id',
    1.71 +  that_key      = 'member_id',
    1.72 +  ref           = 'interests',
    1.73 +  back_ref      = 'member',
    1.74 +  default_order = '"id"'
    1.75 +}
    1.76 +
    1.77 +Member:add_reference{
    1.78 +  mode          = '1m',
    1.79 +  to            = "Initiator",
    1.80 +  this_key      = 'id',
    1.81 +  that_key      = 'member_id',
    1.82 +  ref           = 'initiators',
    1.83 +  back_ref      = 'member',
    1.84 +  default_order = '"id"'
    1.85 +}
    1.86 +
    1.87 +Member:add_reference{
    1.88 +  mode          = '1m',
    1.89 +  to            = "Supporter",
    1.90 +  this_key      = 'id',
    1.91 +  that_key      = 'member_id',
    1.92 +  ref           = 'supporters',
    1.93 +  back_ref      = 'member',
    1.94 +  default_order = '"id"'
    1.95 +}
    1.96 +
    1.97 +Member:add_reference{
    1.98 +  mode          = '1m',
    1.99 +  to            = "Opinion",
   1.100 +  this_key      = 'id',
   1.101 +  that_key      = 'member_id',
   1.102 +  ref           = 'opinions',
   1.103 +  back_ref      = 'member',
   1.104 +  default_order = '"id"'
   1.105 +}
   1.106 +
   1.107 +Member:add_reference{
   1.108 +  mode          = '1m',
   1.109 +  to            = "Delegation",
   1.110 +  this_key      = 'id',
   1.111 +  that_key      = 'truster_id',
   1.112 +  ref           = 'outgoing_delegations',
   1.113 +  back_ref      = 'truster',
   1.114 +  default_order = '"id"'
   1.115 +}
   1.116 +
   1.117 +Member:add_reference{
   1.118 +  mode          = '1m',
   1.119 +  to            = "Delegation",
   1.120 +  this_key      = 'id',
   1.121 +  that_key      = 'trustee_id',
   1.122 +  ref           = 'incoming_delegations',
   1.123 +  back_ref      = 'trustee',
   1.124 +  default_order = '"id"'
   1.125 +}
   1.126 +
   1.127 +Member:add_reference{
   1.128 +  mode          = '1m',
   1.129 +  to            = "DirectVoter",
   1.130 +  this_key      = 'id',
   1.131 +  that_key      = 'member_id',
   1.132 +  ref           = 'direct_voter',
   1.133 +  back_ref      = 'member',
   1.134 +  default_order = '"issue_id"'
   1.135 +}
   1.136 +
   1.137 +Member:add_reference{
   1.138 +  mode          = '1m',
   1.139 +  to            = "Vote",
   1.140 +  this_key      = 'id',
   1.141 +  that_key      = 'member_id',
   1.142 +  ref           = 'vote',
   1.143 +  back_ref      = 'member',
   1.144 +  default_order = '"issue_id", "initiative_id"'
   1.145 +}
   1.146 +
   1.147 +Member:add_reference{
   1.148 +  mode                  = 'mm',
   1.149 +  to                    = "Member",
   1.150 +  this_key              = 'id',
   1.151 +  that_key              = 'id',
   1.152 +  connected_by_table    = 'contact',
   1.153 +  connected_by_this_key = 'member_id',
   1.154 +  connected_by_that_key = 'other_member_id',
   1.155 +  ref                   = 'saved_members',
   1.156 +}
   1.157 +
   1.158 +Member:add_reference{
   1.159 +  mode                  = 'mm',
   1.160 +  to                    = "Member",
   1.161 +  this_key              = 'id',
   1.162 +  that_key              = 'id',
   1.163 +  connected_by_table    = 'contact',
   1.164 +  connected_by_this_key = 'other_member_id',
   1.165 +  connected_by_that_key = 'member_id',
   1.166 +  ref                   = 'saved_by_members',
   1.167 +}
   1.168 +
   1.169 +Member:add_reference{
   1.170 +  mode                  = 'mm',
   1.171 +  to                    = "Area",
   1.172 +  this_key              = 'id',
   1.173 +  that_key              = 'id',
   1.174 +  connected_by_table    = 'membership',
   1.175 +  connected_by_this_key = 'member_id',
   1.176 +  connected_by_that_key = 'area_id',
   1.177 +  ref                   = 'areas'
   1.178 +}
   1.179 +
   1.180 +Member:add_reference{
   1.181 +  mode                  = 'mm',
   1.182 +  to                    = "Issue",
   1.183 +  this_key              = 'id',
   1.184 +  that_key              = 'id',
   1.185 +  connected_by_table    = 'interest',
   1.186 +  connected_by_this_key = 'member_id',
   1.187 +  connected_by_that_key = 'issue_id',
   1.188 +  ref                   = 'issues'
   1.189 +}
   1.190 +
   1.191 +Member:add_reference{
   1.192 +  mode                  = 'mm',
   1.193 +  to                    = "Initiative",
   1.194 +  this_key              = 'id',
   1.195 +  that_key              = 'id',
   1.196 +  connected_by_table    = 'initiator',
   1.197 +  connected_by_this_key = 'member_id',
   1.198 +  connected_by_that_key = 'initiative_id',
   1.199 +  ref                   = 'initiated_initiatives'
   1.200 +}
   1.201 +
   1.202 +Member:add_reference{
   1.203 +  mode                  = 'mm',
   1.204 +  to                    = "Initiative",
   1.205 +  this_key              = 'id',
   1.206 +  that_key              = 'id',
   1.207 +  connected_by_table    = 'supporter',
   1.208 +  connected_by_this_key = 'member_id',
   1.209 +  connected_by_that_key = 'initiative_id',
   1.210 +  ref                   = 'supported_initiatives'
   1.211 +}
   1.212 +
   1.213 +function Member.object:set_password(password)
   1.214 +  local hash = os.crypt(
   1.215 +    password,
   1.216 +    "$1$" .. multirand.string(
   1.217 +      8,
   1.218 +      "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./"
   1.219 +    )
   1.220 +  )
   1.221 +  assert(hash, "os.crypt failed")
   1.222 +  self.password = hash
   1.223 +end
   1.224 +
   1.225 +function Member.object:check_password(password)
   1.226 +  if type(password) == "string" and type(self.password) == "string" then
   1.227 +    return os.crypt(password, self.password) == self.password
   1.228 +  else
   1.229 +    return false
   1.230 +  end
   1.231 +end
   1.232 +
   1.233 +function Member.object_get:published_contacts()
   1.234 +  return Member:new_selector()
   1.235 +    :join('"contact"', nil, '"contact"."other_member_id" = "member"."id"')
   1.236 +    :add_where{ '"contact"."member_id" = ?', self.id }
   1.237 +    :add_where("public")
   1.238 +    :exec()
   1.239 +end
   1.240 +
   1.241 +function Member:by_login_and_password(login, password)
   1.242 +  local selector = self:new_selector()
   1.243 +  selector:add_where{'"login" = ?', login, password }
   1.244 +  selector:add_where('"active"')
   1.245 +  selector:optional_object_mode()
   1.246 +  local member = selector:exec()
   1.247 +  if member and member:check_password(password) then
   1.248 +    return member
   1.249 +  else
   1.250 +    return nil
   1.251 +  end
   1.252 +end
   1.253 +
   1.254 +function Member:search(search_string)
   1.255 +  return self:new_selector()
   1.256 +    :add_where{ '"member"."name" ILIKE ?', "%" .. search_string:gsub("%%", "") .. "%" }
   1.257 +    :add_where("active")
   1.258 +    :exec()
   1.259 +end

Impressum / About Us