liquid_feedback_frontend

annotate model/member.lua @ 2:5c601807d397

Version alpha3

Dark green part of issue supporter bargraph represents all satisfied supporters, regardless of having seen the latest draft

Wiki formatting for drafts

Showing differences between two drafts of the same initiative

Display of outgoing delegation chains

Many other improvements
author bsw
date Mon Nov 23 12:00:00 2009 +0100 (2009-11-23)
parents 3bfb2fcf7ab9
children 80c215dbf076
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@2 5 mode = '11',
bsw@2 6 to = "MemberImage",
bsw@2 7 this_key = 'id',
bsw@2 8 that_key = 'member_id',
bsw@2 9 ref = 'image',
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