liquid_feedback_frontend

annotate app/main/index/index.lua @ 10:72c5e0ee7c98

Version beta6

Bugfixes:
- Security fix: Every user was able to change the discussion URL of an initiative
- Creation of new issues in areas without default policies is now possible
- Members can now be sorted in different ways
- No error when trying to compare a draft with itself
- Added missing local statement to variable initialization in app/main/delegation/new.lua
- CSS flaw in initiative action bar fixed

New features:
- Possiblity to invite other users to become initiator
- Revokation of initiatives implemented
- Number of suggestions, supporters, etc. is shown on corresponding tabs of initiative view
- Members can now be sorted by account creation (default sorting is "newest first")
- Configuration option to create an automatic discussion link for all issues
- First draft of global timeline feature (not accessible via link yet)
- Custom stylesheet URL for users marked as developers

In area listing the number of closed issues is shown too

Renamed "author" field of initiative to "last author"

Removed wrongly included file app/main/member/_show_thumb.lua.orig in the distribution

Help texts updated
author bsw
date Sun Jan 10 12:00:00 2010 +0100 (2010-01-10)
parents 0ee1e0c42d4c
children a3ac899559de
rev   line source
bsw/jbe@0 1 slot.select("title", function()
bsw@10 2 if app.session.member then
bsw@10 3 execute.view{
bsw@10 4 module = "member_image",
bsw@10 5 view = "_show",
bsw@10 6 params = {
bsw@10 7 member = app.session.member,
bsw@10 8 image_type = "avatar"
bsw@10 9 }
bsw/jbe@4 10 }
bsw@10 11 end
bsw/jbe@0 12 end)
bsw/jbe@0 13
bsw/jbe@0 14 slot.select("title", function()
bsw/jbe@0 15 ui.container{
bsw/jbe@0 16 attr = { class = "lang_chooser" },
bsw/jbe@0 17 content = function()
bsw/jbe@0 18 for i, lang in ipairs{"en", "de"} do
bsw/jbe@0 19 ui.link{
bsw/jbe@0 20 content = function()
bsw/jbe@0 21 ui.image{
bsw/jbe@0 22 static = "lang/" .. lang .. ".png",
bsw/jbe@0 23 attr = { style = "margin-left: 0.5em;", alt = lang }
bsw/jbe@0 24 }
bsw/jbe@0 25 end,
bsw/jbe@0 26 module = "index",
bsw/jbe@0 27 action = "set_lang",
bsw/jbe@0 28 params = { lang = lang },
bsw/jbe@0 29 routing = {
bsw/jbe@0 30 default = {
bsw/jbe@0 31 mode = "redirect",
bsw/jbe@0 32 module = request.get_module(),
bsw/jbe@0 33 view = request.get_view(),
bsw/jbe@0 34 id = param.get_id_cgi(),
bsw/jbe@0 35 params = param.get_all_cgi()
bsw/jbe@0 36 }
bsw/jbe@0 37 }
bsw/jbe@0 38 }
bsw/jbe@0 39 end
bsw/jbe@0 40 end
bsw/jbe@0 41 }
bsw/jbe@0 42 end)
bsw/jbe@0 43
bsw/jbe@0 44 slot.put_into("title", encode.html(config.app_title))
bsw/jbe@0 45
bsw/jbe@0 46 slot.select("actions", function()
bsw/jbe@4 47
bsw@10 48 if app.session.member then
bsw@10 49 ui.link{
bsw@10 50 content = function()
bsw@10 51 ui.image{ static = "icons/16/application_form.png" }
bsw@10 52 slot.put(_"Edit my profile")
bsw@10 53 end,
bsw@10 54 module = "member",
bsw@10 55 view = "edit"
bsw@10 56 }
bsw@10 57
bsw/jbe@6 58 ui.link{
bsw/jbe@6 59 content = function()
bsw@10 60 ui.image{ static = "icons/16/user_gray.png" }
bsw@10 61 slot.put(_"Upload images")
bsw/jbe@6 62 end,
bsw@10 63 module = "member",
bsw@10 64 view = "edit_images"
bsw@10 65 }
bsw@10 66
bsw@10 67 execute.view{
bsw@10 68 module = "delegation",
bsw@10 69 view = "_show_box"
bsw/jbe@6 70 }
bsw@10 71
bsw@10 72 ui.link{
bsw@10 73 content = function()
bsw@10 74 ui.image{ static = "icons/16/wrench.png" }
bsw@10 75 slot.put(_"Settings")
bsw@10 76 end,
bsw@10 77 module = "member",
bsw@10 78 view = "settings"
bsw@10 79 }
bsw@10 80
bsw@10 81 if config.download_dir then
bsw@10 82 ui.link{
bsw@10 83 content = function()
bsw@10 84 ui.image{ static = "icons/16/database_save.png" }
bsw@10 85 slot.put(_"Download")
bsw@10 86 end,
bsw@10 87 module = "index",
bsw@10 88 view = "download"
bsw@10 89 }
bsw@10 90 end
bsw@10 91 end
bsw/jbe@0 92 end)
bsw/jbe@0 93
bsw/jbe@4 94 local lang = locale.get("lang")
bsw/jbe@4 95 local basepath = request.get_app_basepath()
bsw/jbe@4 96 local file_name = basepath .. "/locale/motd/" .. lang .. ".txt"
bsw/jbe@4 97 local file = io.open(file_name)
bsw/jbe@4 98 if file ~= nil then
bsw/jbe@4 99 local help_text = file:read("*a")
bsw/jbe@4 100 if #help_text > 0 then
bsw/jbe@4 101 ui.container{
bsw/jbe@4 102 attr = { class = "motd wiki" },
bsw/jbe@4 103 content = function()
bsw/jbe@4 104 slot.put(format.wiki_text(help_text))
bsw/jbe@4 105 end
bsw/jbe@4 106 }
bsw/jbe@4 107 end
bsw/jbe@4 108 end
bsw/jbe@4 109
bsw/jbe@4 110
bsw/jbe@4 111 util.help("index.index", _"Home")
bsw/jbe@4 112
bsw/jbe@5 113 local areas = {}
bsw@10 114 if app.session.member then
bsw@10 115 local selector = Area:new_selector()
bsw@10 116 :reset_fields()
bsw@10 117 :add_field("area.id", nil, { "grouped" })
bsw@10 118 :add_field("area.name", nil, { "grouped" })
bsw@10 119 :add_field("membership.member_id NOTNULL", "is_member", { "grouped" })
bsw@10 120 :add_field("count(issue.id)", "issues_to_vote_count")
bsw@10 121 :add_field("count(interest.member_id)", "interested_issues_to_vote_count")
bsw@10 122 :join("issue", nil, "issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed ISNULL")
bsw@10 123 :left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id })
bsw@10 124 :add_where{ "direct_voter.member_id ISNULL" }
bsw@10 125 :left_join("interest", nil, { "interest.issue_id = issue.id AND interest.member_id = ?", app.session.member.id })
bsw@10 126 :left_join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ? ", app.session.member.id })
bsw@10 127
bsw@10 128 for i, area in ipairs(selector:exec()) do
bsw@10 129 if area.is_member or area.interested_issues_to_vote_count > 0 then
bsw@10 130 areas[#areas+1] = area
bsw@10 131 end
bsw/jbe@5 132 end
bsw/jbe@5 133 end
bsw/jbe@5 134
bsw/jbe@5 135 if #areas > 0 then
bsw/jbe@5 136 ui.container{
bsw/jbe@5 137 attr = { style = "font-weight: bold;" },
bsw/jbe@5 138 content = _"Current votings in areas you are member of and issues you are interested in:"
bsw/jbe@5 139 }
bsw/jbe@5 140
bsw/jbe@5 141 ui.list{
bsw/jbe@5 142 records = areas,
bsw/jbe@5 143 columns = {
bsw/jbe@5 144 {
bsw/jbe@5 145 name = "name"
bsw/jbe@5 146 },
bsw/jbe@5 147 {
bsw/jbe@5 148 content = function(record)
bsw/jbe@5 149 if record.is_member and record.issues_to_vote_count > 0 then
bsw/jbe@5 150 ui.link{
bsw/jbe@5 151 content = function()
bsw/jbe@5 152 if record.issues_to_vote_count > 1 then
bsw/jbe@5 153 slot.put(_("#{issues_to_vote_count} issue(s)", { issues_to_vote_count = record.issues_to_vote_count }))
bsw/jbe@5 154 else
bsw/jbe@5 155 slot.put(_("One issue"))
bsw/jbe@5 156 end
bsw/jbe@5 157 end,
bsw/jbe@5 158 module = "area",
bsw/jbe@5 159 view = "show",
bsw/jbe@5 160 id = record.id,
bsw/jbe@5 161 params = {
bsw/jbe@5 162 filter = "frozen",
bsw/jbe@5 163 filter_voting = "not_voted"
bsw/jbe@5 164 }
bsw/jbe@5 165 }
bsw/jbe@5 166 else
bsw/jbe@5 167 slot.put(_"Not a member")
bsw/jbe@5 168 end
bsw/jbe@5 169 end
bsw/jbe@5 170 },
bsw/jbe@5 171 {
bsw/jbe@5 172 content = function(record)
bsw/jbe@5 173 if record.interested_issues_to_vote_count > 0 then
bsw/jbe@5 174 ui.link{
bsw/jbe@5 175 content = function()
bsw/jbe@5 176 if record.interested_issues_to_vote_count > 1 then
bsw/jbe@5 177 slot.put(_("#{interested_issues_to_vote_count} issue(s) you are interested in", { interested_issues_to_vote_count = record.interested_issues_to_vote_count }))
bsw/jbe@5 178 else
bsw/jbe@5 179 slot.put(_"One issue you are interested in")
bsw/jbe@5 180 end
bsw/jbe@5 181 end,
bsw/jbe@5 182 module = "area",
bsw/jbe@5 183 view = "show",
bsw/jbe@5 184 id = record.id,
bsw/jbe@5 185 params = {
bsw/jbe@5 186 filter = "frozen",
bsw/jbe@5 187 filter_interest = "my",
bsw/jbe@5 188 filter_voting = "not_voted"
bsw/jbe@5 189 }
bsw/jbe@5 190 }
bsw/jbe@5 191 end
bsw/jbe@5 192 end
bsw/jbe@5 193 },
bsw/jbe@5 194 }
bsw/jbe@5 195 }
bsw/jbe@5 196 end
bsw/jbe@5 197
bsw@10 198 local initiatives_selector = Initiative:new_selector()
bsw@10 199 :join("initiator", nil, { "initiator.initiative_id = initiative.id AND initiator.member_id = ? AND initiator.accepted ISNULL", app.session.member.id })
bsw@10 200
bsw@10 201 if initiatives_selector:count() > 0 then
bsw@10 202 ui.container{
bsw@10 203 attr = { style = "font-weight: bold;" },
bsw@10 204 content = _"Initiatives that invited you to become initiator:"
bsw@10 205 }
bsw/jbe@0 206
bsw@10 207 execute.view{
bsw@10 208 module = "initiative",
bsw@10 209 view = "_list",
bsw@10 210 params = { initiatives_selector = initiatives_selector }
bsw@10 211 }
bsw@10 212 end
bsw@10 213
bsw@10 214
bsw@10 215 if app.session.member then
bsw@10 216 execute.view{
bsw@10 217 module = "member",
bsw@10 218 view = "_show",
bsw@10 219 params = { member = app.session.member }
bsw@10 220 }
bsw@10 221 end

Impressum / About Us