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
|