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

Impressum / About Us