bsw/jbe@0: Initiative = mondelefant.new_class() bsw/jbe@0: Initiative.table = 'initiative' bsw/jbe@0: bsw/jbe@0: Initiative:add_reference{ bsw/jbe@0: mode = 'm1', bsw/jbe@0: to = "Issue", bsw/jbe@0: this_key = 'issue_id', bsw/jbe@0: that_key = 'id', bsw/jbe@0: ref = 'issue', bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Initiative:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Draft", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'initiative_id', bsw/jbe@0: ref = 'drafts', bsw/jbe@0: back_ref = 'initiative', bsw/jbe@19: default_order = '"id" DESC' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Initiative:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Suggestion", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'initiative_id', bsw/jbe@0: ref = 'suggestions', bsw/jbe@0: back_ref = 'initiative', bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Initiative:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Initiator", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'initiative_id', bsw/jbe@0: ref = 'initiators', bsw@10: back_ref = 'initiative' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Initiative:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Supporter", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'initiative_id', bsw/jbe@0: ref = 'supporters', bsw/jbe@0: back_ref = 'initiative', bsw/jbe@0: default_order = '"id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Initiative:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Opinion", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'initiative_id', bsw/jbe@0: ref = 'opinions', bsw/jbe@0: back_ref = 'initiative', bsw/jbe@0: default_order = '"id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Initiative:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Vote", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'initiative_id', bsw/jbe@0: ref = 'votes', bsw/jbe@0: back_ref = 'initiative', bsw/jbe@0: default_order = '"member_id"' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Initiative:add_reference{ bsw@10: mode = 'm1', bsw@10: to = "Initiative", bsw@10: this_key = 'suggested_initiative_id', bsw@10: that_key = 'id', bsw@10: ref = 'suggested_initiative', bsw@10: } bsw@10: bsw@10: Initiative: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 = '"initiator"', bsw/jbe@0: connected_by_this_key = 'initiative_id', bsw/jbe@0: connected_by_that_key = 'member_id', bsw/jbe@0: ref = 'initiating_members' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Initiative: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 = '"supporter"', bsw/jbe@0: connected_by_this_key = 'initiative_id', bsw/jbe@0: connected_by_that_key = 'member_id', bsw/jbe@0: ref = 'supporting_members' bsw/jbe@0: } bsw/jbe@0: bsw@3: Initiative:add_reference{ bsw@3: mode = 'mm', bsw@3: to = "Member", bsw@3: this_key = 'id', bsw@3: that_key = 'id', bsw@3: connected_by_table = 'direct_supporter_snapshot', bsw@3: connected_by_this_key = 'initiative_id', bsw@3: connected_by_that_key = 'member_id', bsw@3: ref = 'supporting_members_snapshot' bsw@3: } bsw@3: bsw/jbe@6: bsw@2: function Initiative:get_search_selector(search_string) bsw/jbe@0: return self:new_selector() bsw/jbe@6: :join("draft", nil, "draft.initiative_id = initiative.id") bsw@2: :add_field( {'"highlight"("initiative"."name", ?)', search_string }, "name_highlighted") bsw/jbe@6: :add_where{ '"initiative"."text_search_data" @@ "text_search_query"(?) OR "draft"."text_search_data" @@ "text_search_query"(?)', search_string, search_string } bsw/jbe@6: :add_group_by('"initiative"."id"') bsw/jbe@6: :add_group_by('"initiative"."issue_id"') bsw/jbe@6: :add_group_by('"initiative"."name"') bsw/jbe@6: :add_group_by('"initiative"."discussion_url"') bsw/jbe@6: :add_group_by('"initiative"."created"') bsw/jbe@6: :add_group_by('"initiative"."revoked"') bsw/jbe@6: :add_group_by('"initiative"."admitted"') bsw/jbe@6: :add_group_by('"initiative"."supporter_count"') bsw/jbe@6: :add_group_by('"initiative"."informed_supporter_count"') bsw/jbe@6: :add_group_by('"initiative"."satisfied_supporter_count"') bsw/jbe@6: :add_group_by('"initiative"."satisfied_informed_supporter_count"') bsw/jbe@6: :add_group_by('"initiative"."positive_votes"') bsw/jbe@6: :add_group_by('"initiative"."negative_votes"') bsw/jbe@6: :add_group_by('"initiative"."agreed"') bsw/jbe@6: :add_group_by('"initiative"."rank"') bsw/jbe@19: :add_group_by('"initiative"."suggested_initiative_id"') bsw/jbe@6: :add_group_by('"initiative"."text_search_data"') bsw/jbe@6: :add_group_by('"issue"."population"') bsw/jbe@19: :add_group_by("_initiator.member_id") bsw/jbe@19: :add_group_by("_supporter.member_id") bsw/jbe@0: end bsw/jbe@0: bsw@51: --function Member:get_search_selector(search_string) bsw@51: -- return self:new_selector() bsw@51: -- :add_where("active") bsw@51: --end bsw@2: bsw@2: bsw/jbe@0: function Initiative.object_get:current_draft() bsw/jbe@0: return Draft:new_selector() bsw/jbe@0: :add_where{ '"initiative_id" = ?', self.id } bsw/jbe@0: :add_order_by('"id" DESC') bsw/jbe@0: :single_object_mode() bsw/jbe@0: :exec() bsw/jbe@0: end bsw/jbe@0: bsw/jbe@0: function Initiative.object_get:shortened_name() bsw/jbe@0: local name = self.name bsw/jbe@0: if #name > 100 then bsw/jbe@0: name = name:sub(1,100) .. "..." bsw/jbe@0: end bsw/jbe@0: return name bsw/jbe@0: end bsw/jbe@52: bsw/jbe@52: function Initiative.object_get:initiator_names() bsw/jbe@52: local members = Member:new_selector() bsw/jbe@52: :join("initiator", nil, "initiator.member_id = member.id") bsw/jbe@52: :add_where{ "initiator.initiative_id = ?", self.id } bsw/jbe@52: :add_where{ "initiator.accepted" } bsw/jbe@52: :exec() bsw/jbe@52: bsw/jbe@52: local member_names = {} bsw/jbe@52: for i, member in ipairs(members) do bsw/jbe@52: member_names[#member_names+1] = member.name bsw/jbe@52: end bsw/jbe@52: return member_names bsw/jbe@52: end bsw/jbe@52: