bsw/jbe@0: Member = mondelefant.new_class() bsw/jbe@0: Member.table = 'member' bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Contact", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'member_id', bsw/jbe@0: ref = 'contacts', bsw/jbe@0: back_ref = 'member', bsw/jbe@0: default_order = '"other_member_id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Contact", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'member_id', bsw/jbe@0: ref = 'foreign_contacts', bsw/jbe@0: back_ref = 'other_member', bsw/jbe@0: default_order = '"member_id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Session", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'member_id', bsw/jbe@0: ref = 'sessions', bsw/jbe@0: back_ref = 'member', bsw/jbe@0: default_order = '"ident"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Draft", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'author_id', bsw/jbe@0: ref = 'drafts', bsw/jbe@0: back_ref = 'author', bsw/jbe@0: default_order = '"id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Suggestion", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'author_id', bsw/jbe@0: ref = 'suggestions', bsw/jbe@0: back_ref = 'author', bsw/jbe@0: default_order = '"id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Membership", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'member_id', bsw/jbe@0: ref = 'memberships', bsw/jbe@0: back_ref = 'member', bsw/jbe@0: default_order = '"area_id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Interest", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'member_id', bsw/jbe@0: ref = 'interests', bsw/jbe@0: back_ref = 'member', bsw/jbe@0: default_order = '"id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Initiator", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'member_id', bsw/jbe@0: ref = 'initiators', bsw/jbe@0: back_ref = 'member', bsw/jbe@0: default_order = '"id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Supporter", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'member_id', bsw/jbe@0: ref = 'supporters', bsw/jbe@0: back_ref = 'member', bsw/jbe@0: default_order = '"id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Opinion", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'member_id', bsw/jbe@0: ref = 'opinions', bsw/jbe@0: back_ref = 'member', bsw/jbe@0: default_order = '"id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Delegation", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'truster_id', bsw/jbe@0: ref = 'outgoing_delegations', bsw/jbe@0: back_ref = 'truster', bsw/jbe@0: default_order = '"id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Delegation", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'trustee_id', bsw/jbe@0: ref = 'incoming_delegations', bsw/jbe@0: back_ref = 'trustee', bsw/jbe@0: default_order = '"id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "DirectVoter", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'member_id', bsw/jbe@0: ref = 'direct_voter', bsw/jbe@0: back_ref = 'member', bsw/jbe@0: default_order = '"issue_id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Vote", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'member_id', bsw/jbe@0: ref = 'vote', bsw/jbe@0: back_ref = 'member', bsw/jbe@0: default_order = '"issue_id", "initiative_id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = 'mm', bsw/jbe@0: to = "Member", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'id', bsw/jbe@0: connected_by_table = 'contact', bsw/jbe@0: connected_by_this_key = 'member_id', bsw/jbe@0: connected_by_that_key = 'other_member_id', bsw/jbe@0: ref = 'saved_members', bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = 'mm', bsw/jbe@0: to = "Member", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'id', bsw/jbe@0: connected_by_table = 'contact', bsw/jbe@0: connected_by_this_key = 'other_member_id', bsw/jbe@0: connected_by_that_key = 'member_id', bsw/jbe@0: ref = 'saved_by_members', bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = 'mm', bsw/jbe@0: to = "Area", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'id', bsw/jbe@0: connected_by_table = 'membership', bsw/jbe@0: connected_by_this_key = 'member_id', bsw/jbe@0: connected_by_that_key = 'area_id', bsw/jbe@0: ref = 'areas' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = 'mm', bsw/jbe@0: to = "Issue", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'id', bsw/jbe@0: connected_by_table = 'interest', bsw/jbe@0: connected_by_this_key = 'member_id', bsw/jbe@0: connected_by_that_key = 'issue_id', bsw/jbe@0: ref = 'issues' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = 'mm', bsw/jbe@0: to = "Initiative", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'id', bsw/jbe@0: connected_by_table = 'initiator', bsw/jbe@0: connected_by_this_key = 'member_id', bsw/jbe@0: connected_by_that_key = 'initiative_id', bsw/jbe@0: ref = 'initiated_initiatives' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Member:add_reference{ bsw/jbe@0: mode = 'mm', bsw/jbe@0: to = "Initiative", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'id', bsw/jbe@0: connected_by_table = 'supporter', bsw/jbe@0: connected_by_this_key = 'member_id', bsw/jbe@0: connected_by_that_key = 'initiative_id', bsw/jbe@0: ref = 'supported_initiatives' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: function Member.object:set_password(password) bsw/jbe@0: local hash = os.crypt( bsw/jbe@0: password, bsw/jbe@0: "$1$" .. multirand.string( bsw/jbe@0: 8, bsw/jbe@0: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./" bsw/jbe@0: ) bsw/jbe@0: ) bsw/jbe@0: assert(hash, "os.crypt failed") bsw/jbe@0: self.password = hash bsw/jbe@0: end bsw/jbe@0: bsw/jbe@0: function Member.object:check_password(password) bsw/jbe@0: if type(password) == "string" and type(self.password) == "string" then bsw/jbe@0: return os.crypt(password, self.password) == self.password bsw/jbe@0: else bsw/jbe@0: return false bsw/jbe@0: end bsw/jbe@0: end bsw/jbe@0: bsw/jbe@0: function Member.object_get:published_contacts() bsw/jbe@0: return Member:new_selector() bsw/jbe@0: :join('"contact"', nil, '"contact"."other_member_id" = "member"."id"') bsw/jbe@0: :add_where{ '"contact"."member_id" = ?', self.id } bsw/jbe@0: :add_where("public") bsw/jbe@0: :exec() bsw/jbe@0: end bsw/jbe@0: bsw/jbe@0: function Member:by_login_and_password(login, password) bsw/jbe@0: local selector = self:new_selector() bsw/jbe@0: selector:add_where{'"login" = ?', login, password } bsw/jbe@0: selector:add_where('"active"') bsw/jbe@0: selector:optional_object_mode() bsw/jbe@0: local member = selector:exec() bsw/jbe@0: if member and member:check_password(password) then bsw/jbe@0: return member bsw/jbe@0: else bsw/jbe@0: return nil bsw/jbe@0: end bsw/jbe@0: end bsw/jbe@0: bsw/jbe@0: function Member:search(search_string) bsw/jbe@0: return self:new_selector() bsw/jbe@0: :add_where{ '"member"."name" ILIKE ?', "%" .. search_string:gsub("%%", "") .. "%" } bsw/jbe@0: :add_where("active") bsw/jbe@0: :exec() bsw/jbe@0: end