liquid_feedback_frontend
view 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 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