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