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