liquid_feedback_frontend

annotate model/member.lua @ 0:3bfb2fcf7ab9

Version alpha1
author bsw/jbe
date Wed Nov 18 12:00:00 2009 +0100 (2009-11-18)
parents
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

Impressum / About Us