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