liquid_feedback_frontend
annotate model/member.lua @ 1:dd0109e81922
Version alpha2
Minor bug in bargraph output for suggestions fixed
Minor bug in bargraph output for suggestions fixed
author | bsw |
---|---|
date | Wed Nov 18 12:00:00 2009 +0100 (2009-11-18) |
parents | 3bfb2fcf7ab9 |
children | 5c601807d397 |
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 |