liquid_feedback_frontend
annotate model/initiative.lua @ 75:733f65c0c0a0
Bugfixes, feature enhancements, code-cleanup, and major work on API
Details:
- API
-- Allow relation name to be passed to helper function util.autoapi{...}
-- Added area API
-- Bugfixes in API
--- Correctly return initiatives (bug #162)
--- Correctly process "id" parameter for initiative API
--- Bugfix related to "state" parameter (bug #165)
--- Changed constant "discussion" to "accepted" (in model/issue.lua, used by API)
--- Fixed JSON encoding in auto_api (bug #181)
--- Ignore list filter "voted" in case of public access
--- Enable access to API without session
- Work on RSS feed (incomplete yet)
- Other bugfixes
-- Handle empty browser identification string
-- Handle invalid date in member/update.lua (bugs #24 #109 #115 #136)
-- Better handle errors while converting uploaded images. (bug #79 +5 duplicates)
-- Don't display revoked initiatives in list of new drafts (bug #134)
-- Fixed syntax error in app/main/member/_action/update_name.lua throwing unexpected error, when new name was too short
-- Do not display refresh support button for revoked initiatives
-- Repaired issue search (bug #150)
-- Fixed typos in german translation files
--- "initi(i)erte"
--- "Er(g)eignisse" (bug #161)
- Code cleanup
-- Removed deprecated motd files locale/motd/de.txt and locale/motd/de_public.txt
-- Removed redundant code in app/main/index/_updated_drafts.lua
- New features and (optical) enhancements
-- Support change of notify email; notification of not approved address added to start page
-- Settings dialog splitted into single pages
-- Mark deactivated members
-- Calendar for birthday selection in profile
-- Policy list public readable when public access is enabled
Details:
- API
-- Allow relation name to be passed to helper function util.autoapi{...}
-- Added area API
-- Bugfixes in API
--- Correctly return initiatives (bug #162)
--- Correctly process "id" parameter for initiative API
--- Bugfix related to "state" parameter (bug #165)
--- Changed constant "discussion" to "accepted" (in model/issue.lua, used by API)
--- Fixed JSON encoding in auto_api (bug #181)
--- Ignore list filter "voted" in case of public access
--- Enable access to API without session
- Work on RSS feed (incomplete yet)
- Other bugfixes
-- Handle empty browser identification string
-- Handle invalid date in member/update.lua (bugs #24 #109 #115 #136)
-- Better handle errors while converting uploaded images. (bug #79 +5 duplicates)
-- Don't display revoked initiatives in list of new drafts (bug #134)
-- Fixed syntax error in app/main/member/_action/update_name.lua throwing unexpected error, when new name was too short
-- Do not display refresh support button for revoked initiatives
-- Repaired issue search (bug #150)
-- Fixed typos in german translation files
--- "initi(i)erte"
--- "Er(g)eignisse" (bug #161)
- Code cleanup
-- Removed deprecated motd files locale/motd/de.txt and locale/motd/de_public.txt
-- Removed redundant code in app/main/index/_updated_drafts.lua
- New features and (optical) enhancements
-- Support change of notify email; notification of not approved address added to start page
-- Settings dialog splitted into single pages
-- Mark deactivated members
-- Calendar for birthday selection in profile
-- Policy list public readable when public access is enabled
author | bsw |
---|---|
date | Thu Jul 08 18:44:02 2010 +0200 (2010-07-08) |
parents | 88ac7798b562 |
children | f460555c9896 |
rev | line source |
---|---|
bsw/jbe@0 | 1 Initiative = mondelefant.new_class() |
bsw/jbe@0 | 2 Initiative.table = 'initiative' |
bsw/jbe@0 | 3 |
bsw/jbe@0 | 4 Initiative:add_reference{ |
bsw/jbe@0 | 5 mode = 'm1', |
bsw/jbe@0 | 6 to = "Issue", |
bsw/jbe@0 | 7 this_key = 'issue_id', |
bsw/jbe@0 | 8 that_key = 'id', |
bsw/jbe@0 | 9 ref = 'issue', |
bsw/jbe@0 | 10 } |
bsw/jbe@0 | 11 |
bsw/jbe@0 | 12 Initiative:add_reference{ |
bsw/jbe@0 | 13 mode = '1m', |
bsw/jbe@0 | 14 to = "Draft", |
bsw/jbe@0 | 15 this_key = 'id', |
bsw/jbe@0 | 16 that_key = 'initiative_id', |
bsw/jbe@0 | 17 ref = 'drafts', |
bsw/jbe@0 | 18 back_ref = 'initiative', |
bsw/jbe@19 | 19 default_order = '"id" DESC' |
bsw/jbe@0 | 20 } |
bsw/jbe@0 | 21 |
bsw/jbe@0 | 22 Initiative:add_reference{ |
bsw/jbe@0 | 23 mode = '1m', |
bsw/jbe@0 | 24 to = "Suggestion", |
bsw/jbe@0 | 25 this_key = 'id', |
bsw/jbe@0 | 26 that_key = 'initiative_id', |
bsw/jbe@0 | 27 ref = 'suggestions', |
bsw/jbe@0 | 28 back_ref = 'initiative', |
bsw/jbe@0 | 29 } |
bsw/jbe@0 | 30 |
bsw/jbe@0 | 31 Initiative:add_reference{ |
bsw/jbe@0 | 32 mode = '1m', |
bsw/jbe@0 | 33 to = "Initiator", |
bsw/jbe@0 | 34 this_key = 'id', |
bsw/jbe@0 | 35 that_key = 'initiative_id', |
bsw/jbe@0 | 36 ref = 'initiators', |
bsw@10 | 37 back_ref = 'initiative' |
bsw/jbe@0 | 38 } |
bsw/jbe@0 | 39 |
bsw/jbe@0 | 40 Initiative:add_reference{ |
bsw/jbe@0 | 41 mode = '1m', |
bsw/jbe@0 | 42 to = "Supporter", |
bsw/jbe@0 | 43 this_key = 'id', |
bsw/jbe@0 | 44 that_key = 'initiative_id', |
bsw/jbe@0 | 45 ref = 'supporters', |
bsw/jbe@0 | 46 back_ref = 'initiative', |
bsw/jbe@0 | 47 default_order = '"id"' |
bsw/jbe@0 | 48 } |
bsw/jbe@0 | 49 |
bsw/jbe@0 | 50 Initiative:add_reference{ |
bsw/jbe@0 | 51 mode = '1m', |
bsw/jbe@0 | 52 to = "Opinion", |
bsw/jbe@0 | 53 this_key = 'id', |
bsw/jbe@0 | 54 that_key = 'initiative_id', |
bsw/jbe@0 | 55 ref = 'opinions', |
bsw/jbe@0 | 56 back_ref = 'initiative', |
bsw/jbe@0 | 57 default_order = '"id"' |
bsw/jbe@0 | 58 } |
bsw/jbe@0 | 59 |
bsw/jbe@0 | 60 Initiative:add_reference{ |
bsw/jbe@0 | 61 mode = '1m', |
bsw/jbe@0 | 62 to = "Vote", |
bsw/jbe@0 | 63 this_key = 'id', |
bsw/jbe@0 | 64 that_key = 'initiative_id', |
bsw/jbe@0 | 65 ref = 'votes', |
bsw/jbe@0 | 66 back_ref = 'initiative', |
bsw/jbe@0 | 67 default_order = '"member_id"' |
bsw/jbe@0 | 68 } |
bsw/jbe@0 | 69 |
bsw/jbe@0 | 70 Initiative:add_reference{ |
bsw@10 | 71 mode = 'm1', |
bsw@10 | 72 to = "Initiative", |
bsw@10 | 73 this_key = 'suggested_initiative_id', |
bsw@10 | 74 that_key = 'id', |
bsw@10 | 75 ref = 'suggested_initiative', |
bsw@10 | 76 } |
bsw@10 | 77 |
bsw@10 | 78 Initiative:add_reference{ |
bsw/jbe@0 | 79 mode = 'mm', |
bsw/jbe@0 | 80 to = "Member", |
bsw/jbe@0 | 81 this_key = 'id', |
bsw/jbe@0 | 82 that_key = 'id', |
bsw/jbe@0 | 83 connected_by_table = '"initiator"', |
bsw/jbe@0 | 84 connected_by_this_key = 'initiative_id', |
bsw/jbe@0 | 85 connected_by_that_key = 'member_id', |
bsw/jbe@0 | 86 ref = 'initiating_members' |
bsw/jbe@0 | 87 } |
bsw/jbe@0 | 88 |
bsw/jbe@0 | 89 Initiative:add_reference{ |
bsw/jbe@0 | 90 mode = 'mm', |
bsw/jbe@0 | 91 to = "Member", |
bsw/jbe@0 | 92 this_key = 'id', |
bsw/jbe@0 | 93 that_key = 'id', |
bsw/jbe@0 | 94 connected_by_table = '"supporter"', |
bsw/jbe@0 | 95 connected_by_this_key = 'initiative_id', |
bsw/jbe@0 | 96 connected_by_that_key = 'member_id', |
bsw/jbe@0 | 97 ref = 'supporting_members' |
bsw/jbe@0 | 98 } |
bsw/jbe@0 | 99 |
bsw@3 | 100 Initiative:add_reference{ |
bsw@3 | 101 mode = 'mm', |
bsw@3 | 102 to = "Member", |
bsw@3 | 103 this_key = 'id', |
bsw@3 | 104 that_key = 'id', |
bsw@3 | 105 connected_by_table = 'direct_supporter_snapshot', |
bsw@3 | 106 connected_by_this_key = 'initiative_id', |
bsw@3 | 107 connected_by_that_key = 'member_id', |
bsw@3 | 108 ref = 'supporting_members_snapshot' |
bsw@3 | 109 } |
bsw@3 | 110 |
bsw/jbe@6 | 111 |
bsw@2 | 112 function Initiative:get_search_selector(search_string) |
bsw/jbe@0 | 113 return self:new_selector() |
bsw/jbe@6 | 114 :join("draft", nil, "draft.initiative_id = initiative.id") |
bsw@2 | 115 :add_field( {'"highlight"("initiative"."name", ?)', search_string }, "name_highlighted") |
bsw/jbe@6 | 116 :add_where{ '"initiative"."text_search_data" @@ "text_search_query"(?) OR "draft"."text_search_data" @@ "text_search_query"(?)', search_string, search_string } |
bsw/jbe@6 | 117 :add_group_by('"initiative"."id"') |
bsw/jbe@6 | 118 :add_group_by('"initiative"."issue_id"') |
bsw/jbe@6 | 119 :add_group_by('"initiative"."name"') |
bsw/jbe@6 | 120 :add_group_by('"initiative"."discussion_url"') |
bsw/jbe@6 | 121 :add_group_by('"initiative"."created"') |
bsw/jbe@6 | 122 :add_group_by('"initiative"."revoked"') |
bsw/jbe@6 | 123 :add_group_by('"initiative"."admitted"') |
bsw/jbe@6 | 124 :add_group_by('"initiative"."supporter_count"') |
bsw/jbe@6 | 125 :add_group_by('"initiative"."informed_supporter_count"') |
bsw/jbe@6 | 126 :add_group_by('"initiative"."satisfied_supporter_count"') |
bsw/jbe@6 | 127 :add_group_by('"initiative"."satisfied_informed_supporter_count"') |
bsw/jbe@6 | 128 :add_group_by('"initiative"."positive_votes"') |
bsw/jbe@6 | 129 :add_group_by('"initiative"."negative_votes"') |
bsw/jbe@6 | 130 :add_group_by('"initiative"."agreed"') |
bsw/jbe@6 | 131 :add_group_by('"initiative"."rank"') |
bsw/jbe@19 | 132 :add_group_by('"initiative"."suggested_initiative_id"') |
bsw/jbe@6 | 133 :add_group_by('"initiative"."text_search_data"') |
bsw/jbe@6 | 134 :add_group_by('"issue"."population"') |
bsw/jbe@19 | 135 :add_group_by("_initiator.member_id") |
bsw/jbe@19 | 136 :add_group_by("_supporter.member_id") |
bsw/jbe@0 | 137 end |
bsw/jbe@0 | 138 |
bsw@51 | 139 --function Member:get_search_selector(search_string) |
bsw@51 | 140 -- return self:new_selector() |
bsw@51 | 141 -- :add_where("active") |
bsw@51 | 142 --end |
bsw@2 | 143 |
bsw@2 | 144 |
bsw/jbe@0 | 145 function Initiative.object_get:current_draft() |
bsw/jbe@0 | 146 return Draft:new_selector() |
bsw/jbe@0 | 147 :add_where{ '"initiative_id" = ?', self.id } |
bsw/jbe@0 | 148 :add_order_by('"id" DESC') |
bsw/jbe@0 | 149 :single_object_mode() |
bsw/jbe@0 | 150 :exec() |
bsw/jbe@0 | 151 end |
bsw/jbe@0 | 152 |
bsw/jbe@0 | 153 function Initiative.object_get:shortened_name() |
bsw/jbe@0 | 154 local name = self.name |
bsw/jbe@0 | 155 if #name > 100 then |
bsw/jbe@0 | 156 name = name:sub(1,100) .. "..." |
bsw/jbe@0 | 157 end |
bsw/jbe@0 | 158 return name |
bsw/jbe@0 | 159 end |
bsw/jbe@52 | 160 |
bsw/jbe@52 | 161 function Initiative.object_get:initiator_names() |
bsw/jbe@52 | 162 local members = Member:new_selector() |
bsw/jbe@52 | 163 :join("initiator", nil, "initiator.member_id = member.id") |
bsw/jbe@52 | 164 :add_where{ "initiator.initiative_id = ?", self.id } |
bsw/jbe@52 | 165 :add_where{ "initiator.accepted" } |
bsw/jbe@52 | 166 :exec() |
bsw/jbe@52 | 167 |
bsw/jbe@52 | 168 local member_names = {} |
bsw/jbe@52 | 169 for i, member in ipairs(members) do |
bsw/jbe@52 | 170 member_names[#member_names+1] = member.name |
bsw/jbe@52 | 171 end |
bsw/jbe@52 | 172 return member_names |
bsw/jbe@52 | 173 end |
bsw/jbe@52 | 174 |