liquid_feedback_frontend
changeset 75:733f65c0c0a0 beta19
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
line diff
1.1 --- a/app/main/_filter/21_auth.lua Wed May 26 15:47:52 2010 +0200 1.2 +++ b/app/main/_filter/21_auth.lua Thu Jul 08 18:44:02 2010 +0200 1.3 @@ -24,11 +24,13 @@ 1.4 or request.get_view() == "show_tab" 1.5 ) 1.6 or request.get_module() == "policy" and request.get_view() == "show" 1.7 + or request.get_module() == "policy" and request.get_view() == "list" 1.8 or request.get_module() == "issue" and request.get_view() == "show" 1.9 or request.get_module() == "issue" and request.get_view() == "show_tab" 1.10 or request.get_module() == "initiative" and request.get_view() == "show" 1.11 or request.get_module() == "initiative" and request.get_view() == "show_partial" 1.12 or request.get_module() == "initiative" and request.get_view() == "show_tab" 1.13 + or request.get_module() == "initiative" and request.get_view() == "show.rss" 1.14 or request.get_module() == "suggestion" and request.get_view() == "show" 1.15 or request.get_module() == "draft" and request.get_view() == "diff" 1.16 then 1.17 @@ -37,6 +39,10 @@ 1.18 1.19 end 1.20 1.21 +if config.api_enabled and request.get_module() == "api" then 1.22 + auth_needed = false 1.23 +end 1.24 + 1.25 if config.public_access and not app.session.member_id and auth_needed and request.get_module() == "index" and request.get_view() == "index" then 1.26 request.redirect{ module = "area", view = "list" } 1.27 return
2.1 --- a/app/main/_filter_view/34_stylesheet.lua Wed May 26 15:47:52 2010 +0200 2.2 +++ b/app/main/_filter_view/34_stylesheet.lua Thu Jul 08 18:44:02 2010 +0200 2.3 @@ -11,7 +11,7 @@ 2.4 slot.put_into("stylesheet_url", config.absolute_base_url .. "static/style.css") 2.5 end 2.6 2.7 -if os.getenv("HTTP_USER_AGENT"):find("Android.*AppleWebKit.*Mobile Safari") then 2.8 +if os.getenv("HTTP_USER_AGENT") and os.getenv("HTTP_USER_AGENT"):find("Android.*AppleWebKit.*Mobile Safari") then 2.9 slot.select("html_head", function() 2.10 ui.tag{ 2.11 tag = "style", 2.12 @@ -52,4 +52,4 @@ 2.13 } 2.14 else 2.15 execute.inner() 2.16 -end 2.17 \ No newline at end of file 2.18 +end
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/app/main/api/area.lua Thu Jul 08 18:44:02 2010 +0200 3.3 @@ -0,0 +1,54 @@ 3.4 +local id = param.get("id") 3.5 +local min_id = param.get("min_id") 3.6 +local max_id = param.get("max_id") 3.7 +local order = param.get("order") 3.8 +local limit = param.get("limit", atom.integer) 3.9 + 3.10 +local areas_selector = Area:new_selector() 3.11 + 3.12 +if id then 3.13 + areas_selector:add_where{"area.id = ?", id} 3.14 +end 3.15 + 3.16 +if min_id then 3.17 + areas_selector:add_where{"area.id >= ?", min_id} 3.18 +end 3.19 + 3.20 +if max_id then 3.21 + areas_selector:add_where{"area.id <= ?", max_id} 3.22 +end 3.23 + 3.24 +if order == "name" then 3.25 + areas_selector:add_order_by("area.name") 3.26 +end 3.27 + 3.28 +if order == "member_weight" then 3.29 + areas_selector:add_order_by("area.member_weight DESC") 3.30 +end 3.31 + 3.32 +areas_selector:add_order_by("area.id") 3.33 + 3.34 +if limit then 3.35 + initiatives_selector:limit(limit) 3.36 +end 3.37 + 3.38 +local api_engine = param.get("api_engine") or "xml" 3.39 + 3.40 +local fields = { 3.41 + 3.42 + { name = "id", field = "area.id" }, 3.43 + { name = "name", field = "area.name" }, 3.44 + { name = "description", field = "area.description" }, 3.45 + { name = "direct_member_count", field = "area.direct_member_count" }, 3.46 + { name = "member_weight", field = "area.member_weight" }, 3.47 + { name = "autoreject_weight", field = "area.autoreject_weight" }, 3.48 + { name = "active", field = "area.active" }, 3.49 + 3.50 +} 3.51 + 3.52 +util.autoapi{ 3.53 + relation_name = "area", 3.54 + selector = areas_selector, 3.55 + fields = fields, 3.56 + api_engine = api_engine 3.57 +} 3.58 \ No newline at end of file
4.1 --- a/app/main/api/initiative.lua Wed May 26 15:47:52 2010 +0200 4.2 +++ b/app/main/api/initiative.lua Thu Jul 08 18:44:02 2010 +0200 4.3 @@ -1,4 +1,4 @@ 4.4 -local id = param.get_id() 4.5 +local id = param.get("id") 4.6 local min_id = param.get("min_id") 4.7 local max_id = param.get("max_id") 4.8 local area_id = param.get("area_id", atom.integer) 4.9 @@ -13,7 +13,7 @@ 4.10 local order = param.get("order") 4.11 4.12 local initiatives_selector = Initiative:new_selector() 4.13 - :join("issue", nil, "issue.id = initiative.id") 4.14 + :join("issue", nil, "issue.id = initiative.issue_id") 4.15 :join("area", nil, "area.id = issue.area_id") 4.16 :join("policy", nil, "policy.id = issue.policy_id") 4.17 4.18 @@ -42,7 +42,7 @@ 4.19 end 4.20 4.21 if state then 4.22 - Issue:modify_selector_for_state(state) 4.23 + Issue:modify_selector_for_state(initiatives_selector, state) 4.24 end 4.25 4.26 if agreed then 4.27 @@ -187,6 +187,7 @@ 4.28 } 4.29 4.30 util.autoapi{ 4.31 + relation_name = "initiative", 4.32 selector = initiatives_selector, 4.33 fields = fields, 4.34 api_engine = api_engine
5.1 --- a/app/main/index/_action/confirm_notify_email.lua Wed May 26 15:47:52 2010 +0200 5.2 +++ b/app/main/index/_action/confirm_notify_email.lua Thu Jul 08 18:44:02 2010 +0200 5.3 @@ -8,8 +8,10 @@ 5.4 5.5 if member then 5.6 member.notify_email = member.notify_email_unconfirmed 5.7 - member.notify_email_unconfirmed = nil 5.8 - member.notify_email_secret = nil 5.9 + member.notify_email_unconfirmed = nil 5.10 + member.notify_email_secret = nil 5.11 + member.notify_email_secret_expiry = nil 5.12 + member.notify_email_lock_expiry = nil 5.13 member:save() 5.14 slot.put_into("notice", _"Email address is confirmed now") 5.15 else
6.1 --- a/app/main/index/_updated_drafts.lua Wed May 26 15:47:52 2010 +0200 6.2 +++ b/app/main/index/_updated_drafts.lua Thu Jul 08 18:44:02 2010 +0200 6.3 @@ -1,8 +1,4 @@ 6.4 -local initiatives_selector = Initiative:new_selector() 6.5 - :join("issue", "_issue_state", "_issue_state.id = initiative.issue_id AND _issue_state.closed ISNULL AND _issue_state.fully_frozen ISNULL") 6.6 - :join("current_draft", "_current_draft", "_current_draft.initiative_id = initiative.id") 6.7 - :join("supporter", "supporter", { "supporter.member_id = ? AND supporter.initiative_id = initiative.id AND supporter.draft_id < _current_draft.id", app.session.member_id }) 6.8 - 6.9 +local initiatives_selector = param.get("initiatives_selector", "table") 6.10 if initiatives_selector:count() > 0 then 6.11 ui.container{ 6.12 attr = { style = "font-weight: bold;" },
7.1 --- a/app/main/initiative/_show.lua Wed May 26 15:47:52 2010 +0200 7.2 +++ b/app/main/initiative/_show.lua Thu Jul 08 18:44:02 2010 +0200 7.3 @@ -147,21 +147,23 @@ 7.4 new_draft_id = new_draft_id 7.5 } 7.6 } 7.7 - slot.put(" ") 7.8 - ui.link{ 7.9 - text = _"Refresh support to current draft", 7.10 - module = "initiative", 7.11 - action = "add_support", 7.12 - id = initiative.id, 7.13 - routing = { 7.14 - default = { 7.15 - mode = "redirect", 7.16 - module = "initiative", 7.17 - view = "show", 7.18 - id = initiative.id 7.19 + if not initiative.revoked then 7.20 + slot.put(" ") 7.21 + ui.link{ 7.22 + text = _"Refresh support to current draft", 7.23 + module = "initiative", 7.24 + action = "add_support", 7.25 + id = initiative.id, 7.26 + routing = { 7.27 + default = { 7.28 + mode = "redirect", 7.29 + module = "initiative", 7.30 + view = "show", 7.31 + id = initiative.id 7.32 + } 7.33 } 7.34 } 7.35 - } 7.36 + end 7.37 end 7.38 } 7.39 end
8.1 --- a/app/main/initiative/list_rss.lua Wed May 26 15:47:52 2010 +0200 8.2 +++ b/app/main/initiative/list_rss.lua Thu Jul 08 18:44:02 2010 +0200 8.3 @@ -79,13 +79,15 @@ 8.4 8.5 ui.tag{ 8.6 tag = "id", 8.7 - content = "urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6" 8.8 +-- content = "urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6" 8.9 } 8.10 8.11 +--[[ 8.12 ui.tag{ 8.13 tag = "updated", 8.14 content = "2003-12-14T10:20:09Z" 8.15 } 8.16 +--]] 8.17 8.18 for i, initiative in ipairs(initiatives) do 8.19 ui.tag{
9.1 --- a/app/main/initiative/show.rss.lua Wed May 26 15:47:52 2010 +0200 9.2 +++ b/app/main/initiative/show.rss.lua Thu Jul 08 18:44:02 2010 +0200 9.3 @@ -14,19 +14,16 @@ 9.4 slot.put("</item>") 9.5 end 9.6 9.7 - 9.8 local initiative = Initiative:by_id(param.get_id()) 9.9 9.10 rss_channel{ 9.11 title = initiative.name, 9.12 description = initiative.current_draft.content, 9.13 language = "de", 9.14 - copyright = initiative.current_draft.author.name, 9.15 - pubDate = "Tue, 8 Jul 2008 2:43:19" 9.16 } 9.17 9.18 for i, suggestion in ipairs(initiative.suggestions) do 9.19 - 9.20 + 9.21 local text = suggestion.name 9.22 9.23 text = text .. " (" 9.24 @@ -40,10 +37,7 @@ 9.25 rss_item{ 9.26 title = text, 9.27 description = suggestion.content, 9.28 - link = "http://localhost/lf/suggestion/show/" .. tostring(suggestion.id) .. ".html", 9.29 - author = "", 9.30 - guid = "guid", 9.31 - pubDate = "Tue, 8 Jul 2008 2:43:19" 9.32 + link = request.get_base_url() .. "/lf/suggestion/show/" .. tostring(suggestion.id) .. ".html", 9.33 } 9.34 9.35 end 9.36 \ No newline at end of file
10.1 --- a/app/main/issue/_list.lua Wed May 26 15:47:52 2010 +0200 10.2 +++ b/app/main/issue/_list.lua Thu Jul 08 18:44:02 2010 +0200 10.3 @@ -76,7 +76,7 @@ 10.4 } 10.5 10.6 10.7 -if param.get("filter") == "frozen" then 10.8 +if app.session.member and param.get("filter") == "frozen" then 10.9 filters[#filters+1] = { 10.10 label = _"Filter", 10.11 name = "filter_voting",
11.1 --- a/app/main/member/_action/update.lua Wed May 26 15:47:52 2010 +0200 11.2 +++ b/app/main/member/_action/update.lua Thu Jul 08 18:44:02 2010 +0200 11.3 @@ -15,6 +15,12 @@ 11.4 "statement" 11.5 ) 11.6 11.7 +if tostring(app.session.member.birthday) == "invalid_date" then 11.8 + app.session.member.birthday = nil 11.9 + slot.put_into("error", _"Date format is not valid. Please use following format: YYYY-MM-DD") 11.10 + return false 11.11 +end 11.12 + 11.13 app.session.member:save() 11.14 11.15
12.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 12.2 +++ b/app/main/member/_action/update_email.lua Thu Jul 08 18:44:02 2010 +0200 12.3 @@ -0,0 +1,33 @@ 12.4 +local resend = param.get("resend", atom.boolean) 12.5 + 12.6 +if app.session.member.notify_email_locked then 12.7 + if resend then 12.8 + slot.put_into("error", _"We have sent an email with activation link already in the last hour. Please try again later.") 12.9 + else 12.10 + slot.put_into("error", _"You can change your email address only once per hour. Please try again later.") 12.11 + end 12.12 + return false 12.13 +end 12.14 + 12.15 +local email 12.16 +if resend then 12.17 + email = app.session.member.notify_email_unconfirmed 12.18 +else 12.19 + email = param.get("email") 12.20 +end 12.21 + 12.22 +email = util.trim(email) 12.23 + 12.24 +if #email < 3 then 12.25 + slot.put_into("error", _"This email address is too short!") 12.26 + return false 12.27 +end 12.28 + 12.29 +local success = app.session.member:set_notify_email(email) 12.30 + 12.31 +if not success then 12.32 + slot.put_into("error", _"We couldn't deliver a confirmation mail to this address. Please check entered email address.") 12.33 + return false 12.34 +end 12.35 + 12.36 +slot.put_into("notice", _"Your email address has been changed, please check for confirmation email with activation link!")
13.1 --- a/app/main/member/_action/update_images.lua Wed May 26 15:47:52 2010 +0200 13.2 +++ b/app/main/member/_action/update_images.lua Thu Jul 08 18:44:02 2010 +0200 13.3 @@ -23,7 +23,8 @@ 13.4 local convert_func = config.member_image_convert_func[image_type] 13.5 local data_scaled, err, status = convert_func(data) 13.6 if status ~= 0 or data_scaled == nil then 13.7 - error("error while converting image") 13.8 + slot.put_into("error", _"Error while converting image. Please note, that only JPG files are supported!") 13.9 + return false 13.10 end 13.11 13.12 if not member_image then
14.1 --- a/app/main/member/_action/update_name.lua Wed May 26 15:47:52 2010 +0200 14.2 +++ b/app/main/member/_action/update_name.lua Thu Jul 08 18:44:02 2010 +0200 14.3 @@ -2,11 +2,11 @@ 14.4 14.5 name = util.trim(name) 14.6 14.7 -if #name < 3 then 14.8 - slot.put_into(_error, _"This name is too short!") 14.9 +if #name < 3 then 14.10 + slot.put_into("error", _"This name is too short!") 14.11 + return false 14.12 end 14.13 14.14 - 14.15 app.session.member.name = name 14.16 14.17 local db_error = app.session.member:try_save()
15.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 15.2 +++ b/app/main/member/_email_unconfirmed.lua Thu Jul 08 18:44:02 2010 +0200 15.3 @@ -0,0 +1,49 @@ 15.4 +if app.session.member.notify_email_unconfirmed then 15.5 + 15.6 + local current = Member:new_selector() 15.7 + :add_where{ "id = ?", app.session.member_id } 15.8 + :add_where("notify_email_unconfirmed NOTNULL") 15.9 + :add_where("notify_email_secret_expiry > now()") 15.10 + :optional_object_mode() 15.11 + :exec() 15.12 + 15.13 + ui.heading{ level = 2, content = _"Notification address unconfirmed" } 15.14 + 15.15 + if current then 15.16 + ui.tag{ 15.17 + tag = "div", 15.18 + content = _("You didn't confirmed your email address '#{email}'. You have received an email with an activation link.", { email = app.session.member.notify_email_unconfirmed }) 15.19 + } 15.20 + else 15.21 + ui.tag{ 15.22 + tag = "div", 15.23 + content = _("You didn't confirmed your email address '#{email}' within 7 days.", { email = app.session.member.notify_email_unconfirmed }) 15.24 + } 15.25 + end 15.26 + slot.put("<br />") 15.27 + 15.28 + ui.link{ 15.29 + text = _"Change email address", 15.30 + module = "member", 15.31 + view = "settings_email", 15.32 + } 15.33 + slot.put("<br />") 15.34 + slot.put("<br />") 15.35 + 15.36 + ui.link{ 15.37 + text = _("Resend activation email to '#{email}'", { email = app.session.member.notify_email_unconfirmed }), 15.38 + module = "member", 15.39 + action = "update_email", 15.40 + params = { 15.41 + resend = true 15.42 + }, 15.43 + routing = { 15.44 + default = { 15.45 + mode = "redirect", 15.46 + module = "index", 15.47 + view = "index" 15.48 + } 15.49 + } 15.50 + } 15.51 + 15.52 +end
16.1 --- a/app/main/member/_show_thumb.lua Wed May 26 15:47:52 2010 +0200 16.2 +++ b/app/main/member/_show_thumb.lua Thu Jul 08 18:44:02 2010 +0200 16.3 @@ -28,6 +28,14 @@ 16.4 attr = { class = "flags" }, 16.5 content = function() 16.6 16.7 + if not member.active then 16.8 + local text = _"Member is deactivated" 16.9 + ui.image{ 16.10 + attr = { alt = text, title = text }, 16.11 + static = "icons/16/cross.png" 16.12 + } 16.13 + end 16.14 + 16.15 if member.grade then 16.16 ui.link{ 16.17 module = "vote",
17.1 --- a/app/main/member/developer_settings.lua Wed May 26 15:47:52 2010 +0200 17.2 +++ b/app/main/member/developer_settings.lua Thu Jul 08 18:44:02 2010 +0200 17.3 @@ -1,4 +1,4 @@ 17.4 -slot.put_into("title", _"Developer features") 17.5 +slot.put_into("title", _"Developer settings") 17.6 17.7 slot.select("actions", function() 17.8 ui.link{
18.1 --- a/app/main/member/edit.lua Wed May 26 15:47:52 2010 +0200 18.2 +++ b/app/main/member/edit.lua Thu Jul 08 18:44:02 2010 +0200 18.3 @@ -29,7 +29,9 @@ 18.4 ui.field.text{ label = _"Organizational unit", name = "organizational_unit" } 18.5 ui.field.text{ label = _"Internal posts", name = "internal_posts" } 18.6 ui.field.text{ label = _"Real name", name = "realname" } 18.7 - ui.field.text{ label = _"Birthday" .. " YYYY-MM-DD ", name = "birthday" } 18.8 + ui.field.text{ label = _"Birthday" .. " YYYY-MM-DD ", name = "birthday", attr = { id = "profile_birthday" } } 18.9 + ui.script{ static = "gregor.js/gregor.js" } 18.10 + util.gregor("profile_birthday", "document.getElementById('timeline_search_date').form.submit();") 18.11 ui.field.text{ label = _"Address", name = "address", multiline = true } 18.12 ui.field.text{ label = _"email", name = "email" } 18.13 ui.field.text{ label = _"xmpp", name = "xmpp_address" }
19.1 --- a/app/main/member/settings.lua Wed May 26 15:47:52 2010 +0200 19.2 +++ b/app/main/member/settings.lua Thu Jul 08 18:44:02 2010 +0200 19.3 @@ -1,4 +1,3 @@ 19.4 - 19.5 slot.put_into("title", _"Settings") 19.6 19.7 slot.select("actions", function() 19.8 @@ -10,125 +9,36 @@ 19.9 module = "index", 19.10 view = "index" 19.11 } 19.12 - 19.13 - ui.link{ 19.14 - content = function() 19.15 - ui.image{ static = "icons/16/wrench.png" } 19.16 - slot.put(_"Developer features") 19.17 - end, 19.18 - module = "member", 19.19 - view = "developer_settings" 19.20 - } 19.21 - 19.22 end) 19.23 19.24 -ui.heading{ content = _"Display settings" } 19.25 -util.help("member.settings.display", _"Display settings") 19.26 +ui.tag{ 19.27 + tag = "div", 19.28 + content = _"You can change the following settings:" 19.29 +} 19.30 19.31 -ui.form{ 19.32 - attr = { class = "vertical" }, 19.33 - module = "member", 19.34 - action = "update_display", 19.35 - routing = { 19.36 - ok = { 19.37 - mode = "redirect", 19.38 - module = "index", 19.39 - view = "index" 19.40 - } 19.41 - }, 19.42 - content = function() 19.43 - ui.field.select{ 19.44 - label = _"Type of tabs", 19.45 - foreign_records = { 19.46 - { id = "tabs", name = _"Tabs" }, 19.47 - { id = "accordeon", name = _"Accordion (none expanded)" .. " === " .. _"EXPERIMENTAL FEATURE" .. " ===" }, 19.48 - { id = "accordeon_first_expanded", name = _"Accordion (first expanded)" .. " === " .. _"EXPERIMENTAL FEATURE" .. " ===" }, 19.49 --- { id = "accordeon_all_expanded", name = _"Accordion (all expanded)" } 19.50 - }, 19.51 - foreign_id = "id", 19.52 - foreign_name = "name", 19.53 - name = "tab_mode", 19.54 - value = app.session.member:get_setting_value("tab_mode") 19.55 - } 19.56 - ui.field.select{ 19.57 - label = _"Number of initiatives to preview", 19.58 - foreign_records = { 19.59 - { id = 3, name = "3" }, 19.60 - { id = 4, name = "4" }, 19.61 - { id = 5, name = "5" }, 19.62 - { id = 6, name = "6" }, 19.63 - { id = 7, name = "7" }, 19.64 - { id = 8, name = "8" }, 19.65 - { id = 9, name = "9" }, 19.66 - { id = 10, name = "10" }, 19.67 - }, 19.68 - foreign_id = "id", 19.69 - foreign_name = "name", 19.70 - name = "initiatives_preview_limit", 19.71 - value = app.session.member:get_setting_value("initiatives_preview_limit") 19.72 - } 19.73 - ui.submit{ value = _"Change display settings" } 19.74 - end 19.75 +local pages = { 19.76 + { view = "settings_display", text = _"Display settings" }, 19.77 + { view = "settings_email", text = _"Change your notification email address" }, 19.78 + { view = "settings_name", text = _"Change your name" }, 19.79 + { view = "settings_login", text = _"Change your login" }, 19.80 + { view = "settings_password", text = _"Change your password" }, 19.81 + { view = "developer_settings", text = _"Developer settings" }, 19.82 } 19.83 19.84 -ui.heading{ content = _"Change your name" } 19.85 -util.help("member.settings.name", _"Change name") 19.86 - 19.87 -ui.form{ 19.88 - attr = { class = "vertical" }, 19.89 - module = "member", 19.90 - action = "update_name", 19.91 - routing = { 19.92 - ok = { 19.93 - mode = "redirect", 19.94 - module = "index", 19.95 - view = "index" 19.96 +ui.list{ 19.97 + attr = { class = "menu_list" }, 19.98 + style = "ulli", 19.99 + records = pages, 19.100 + columns = { 19.101 + { 19.102 + content = function(page) 19.103 + ui.link{ 19.104 + module = "member", 19.105 + view = page.view, 19.106 + text = page.text 19.107 + } 19.108 + end 19.109 } 19.110 - }, 19.111 - content = function() 19.112 - ui.field.text{ label = _"Name", name = "name", value = app.session.member.name } 19.113 - ui.submit{ value = _"Change name" } 19.114 - end 19.115 + } 19.116 } 19.117 19.118 -ui.heading{ content = _"Change your login" } 19.119 -util.help("member.settings.login", _"Change login") 19.120 - 19.121 -ui.form{ 19.122 - attr = { class = "vertical" }, 19.123 - module = "member", 19.124 - action = "update_login", 19.125 - routing = { 19.126 - ok = { 19.127 - mode = "redirect", 19.128 - module = "index", 19.129 - view = "index" 19.130 - } 19.131 - }, 19.132 - content = function() 19.133 - ui.field.text{ label = _"Login", name = "login", value = app.session.member.login } 19.134 - ui.submit{ value = _"Change login" } 19.135 - end 19.136 -} 19.137 - 19.138 -ui.heading{ content = _"Change your password" } 19.139 -util.help("member.settings.password", _"Change password") 19.140 - 19.141 -ui.form{ 19.142 - attr = { class = "vertical" }, 19.143 - module = "member", 19.144 - action = "update_password", 19.145 - routing = { 19.146 - ok = { 19.147 - mode = "redirect", 19.148 - module = "index", 19.149 - view = "index" 19.150 - } 19.151 - }, 19.152 - content = function() 19.153 - ui.field.password{ label = _"Old password", name = "old_password" } 19.154 - ui.field.password{ label = _"New password", name = "new_password1" } 19.155 - ui.field.password{ label = _"Repeat new password", name = "new_password2" } 19.156 - ui.submit{ value = _"Change password" } 19.157 - end 19.158 -} 19.159 \ No newline at end of file
20.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 20.2 +++ b/app/main/member/settings_display.lua Thu Jul 08 18:44:02 2010 +0200 20.3 @@ -0,0 +1,61 @@ 20.4 +slot.put_into("title", _"Display settings") 20.5 + 20.6 +slot.select("actions", function() 20.7 + ui.link{ 20.8 + content = function() 20.9 + ui.image{ static = "icons/16/cancel.png" } 20.10 + slot.put(_"Cancel") 20.11 + end, 20.12 + module = "member", 20.13 + view = "settings" 20.14 + } 20.15 +end) 20.16 + 20.17 + 20.18 +util.help("member.settings.display", _"Display settings") 20.19 + 20.20 +ui.form{ 20.21 + attr = { class = "vertical" }, 20.22 + module = "member", 20.23 + action = "update_display", 20.24 + routing = { 20.25 + ok = { 20.26 + mode = "redirect", 20.27 + module = "index", 20.28 + view = "index" 20.29 + } 20.30 + }, 20.31 + content = function() 20.32 + ui.field.select{ 20.33 + label = _"Type of tabs", 20.34 + foreign_records = { 20.35 + { id = "tabs", name = _"Tabs" }, 20.36 + { id = "accordeon", name = _"Accordion (none expanded)" .. " === " .. _"EXPERIMENTAL FEATURE" .. " ===" }, 20.37 + { id = "accordeon_first_expanded", name = _"Accordion (first expanded)" .. " === " .. _"EXPERIMENTAL FEATURE" .. " ===" }, 20.38 +-- { id = "accordeon_all_expanded", name = _"Accordion (all expanded)" } 20.39 + }, 20.40 + foreign_id = "id", 20.41 + foreign_name = "name", 20.42 + name = "tab_mode", 20.43 + value = app.session.member:get_setting_value("tab_mode") 20.44 + } 20.45 + ui.field.select{ 20.46 + label = _"Number of initiatives to preview", 20.47 + foreign_records = { 20.48 + { id = 3, name = "3" }, 20.49 + { id = 4, name = "4" }, 20.50 + { id = 5, name = "5" }, 20.51 + { id = 6, name = "6" }, 20.52 + { id = 7, name = "7" }, 20.53 + { id = 8, name = "8" }, 20.54 + { id = 9, name = "9" }, 20.55 + { id = 10, name = "10" }, 20.56 + }, 20.57 + foreign_id = "id", 20.58 + foreign_name = "name", 20.59 + name = "initiatives_preview_limit", 20.60 + value = app.session.member:get_setting_value("initiatives_preview_limit") 20.61 + } 20.62 + ui.submit{ value = _"Change display settings" } 20.63 + end 20.64 +}
21.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 21.2 +++ b/app/main/member/settings_email.lua Thu Jul 08 18:44:02 2010 +0200 21.3 @@ -0,0 +1,38 @@ 21.4 +slot.put_into("title", _"Change your notification email address") 21.5 + 21.6 +slot.select("actions", function() 21.7 + ui.link{ 21.8 + content = function() 21.9 + ui.image{ static = "icons/16/cancel.png" } 21.10 + slot.put(_"Cancel") 21.11 + end, 21.12 + module = "member", 21.13 + view = "settings" 21.14 + } 21.15 +end) 21.16 + 21.17 +util.help("member.settings.email_address", _"Change email") 21.18 + 21.19 +ui.form{ 21.20 + attr = { class = "vertical" }, 21.21 + module = "member", 21.22 + action = "update_email", 21.23 + routing = { 21.24 + ok = { 21.25 + mode = "redirect", 21.26 + module = "index", 21.27 + view = "index" 21.28 + } 21.29 + }, 21.30 + content = function() 21.31 + if app.session.member.notify_email then 21.32 + ui.field.text{ label = _"Confirmed address", value = app.session.member.notify_email, readonly = true } 21.33 + end 21.34 + if app.session.member.notify_email_unconfirmed then 21.35 + ui.field.text{ label = _"Unconfirmed address", value = app.session.member.notify_email_unconfirmed, readonly = true } 21.36 + end 21.37 + ui.field.text{ label = _"New address", name = "email" } 21.38 + ui.submit{ value = _"Change email" } 21.39 + end 21.40 +} 21.41 +
22.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 22.2 +++ b/app/main/member/settings_login.lua Thu Jul 08 18:44:02 2010 +0200 22.3 @@ -0,0 +1,32 @@ 22.4 +slot.put_into("title", _"Change your login") 22.5 + 22.6 +slot.select("actions", function() 22.7 + ui.link{ 22.8 + content = function() 22.9 + ui.image{ static = "icons/16/cancel.png" } 22.10 + slot.put(_"Cancel") 22.11 + end, 22.12 + module = "member", 22.13 + view = "settings" 22.14 + } 22.15 +end) 22.16 + 22.17 +util.help("member.settings.login", _"Change login") 22.18 + 22.19 +ui.form{ 22.20 + attr = { class = "vertical" }, 22.21 + module = "member", 22.22 + action = "update_login", 22.23 + routing = { 22.24 + ok = { 22.25 + mode = "redirect", 22.26 + module = "index", 22.27 + view = "index" 22.28 + } 22.29 + }, 22.30 + content = function() 22.31 + ui.field.text{ label = _"Login", name = "login", value = app.session.member.login } 22.32 + ui.submit{ value = _"Change login" } 22.33 + end 22.34 +} 22.35 +
23.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 23.2 +++ b/app/main/member/settings_name.lua Thu Jul 08 18:44:02 2010 +0200 23.3 @@ -0,0 +1,31 @@ 23.4 +slot.put_into("title", _"Change your name") 23.5 + 23.6 +slot.select("actions", function() 23.7 + ui.link{ 23.8 + content = function() 23.9 + ui.image{ static = "icons/16/cancel.png" } 23.10 + slot.put(_"Cancel") 23.11 + end, 23.12 + module = "member", 23.13 + view = "settings" 23.14 + } 23.15 +end) 23.16 + 23.17 +util.help("member.settings.name", _"Change name") 23.18 + 23.19 +ui.form{ 23.20 + attr = { class = "vertical" }, 23.21 + module = "member", 23.22 + action = "update_name", 23.23 + routing = { 23.24 + ok = { 23.25 + mode = "redirect", 23.26 + module = "index", 23.27 + view = "index" 23.28 + } 23.29 + }, 23.30 + content = function() 23.31 + ui.field.text{ label = _"Name", name = "name", value = app.session.member.name } 23.32 + ui.submit{ value = _"Change name" } 23.33 + end 23.34 +}
24.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 24.2 +++ b/app/main/member/settings_password.lua Thu Jul 08 18:44:02 2010 +0200 24.3 @@ -0,0 +1,33 @@ 24.4 +slot.put_into("title", _"Change your password") 24.5 + 24.6 +slot.select("actions", function() 24.7 + ui.link{ 24.8 + content = function() 24.9 + ui.image{ static = "icons/16/cancel.png" } 24.10 + slot.put(_"Cancel") 24.11 + end, 24.12 + module = "member", 24.13 + view = "settings" 24.14 + } 24.15 +end) 24.16 + 24.17 +util.help("member.settings.password", _"Change password") 24.18 + 24.19 +ui.form{ 24.20 + attr = { class = "vertical" }, 24.21 + module = "member", 24.22 + action = "update_password", 24.23 + routing = { 24.24 + ok = { 24.25 + mode = "redirect", 24.26 + module = "index", 24.27 + view = "index" 24.28 + } 24.29 + }, 24.30 + content = function() 24.31 + ui.field.password{ label = _"Old password", name = "old_password" } 24.32 + ui.field.password{ label = _"New password", name = "new_password1" } 24.33 + ui.field.password{ label = _"Repeat new password", name = "new_password2" } 24.34 + ui.submit{ value = _"Change password" } 24.35 + end 24.36 +} 24.37 \ No newline at end of file
25.1 --- a/app/main/member/show.lua Wed May 26 15:47:52 2010 +0200 25.2 +++ b/app/main/member/show.lua Thu Jul 08 18:44:02 2010 +0200 25.3 @@ -14,8 +14,15 @@ 25.4 slot.put_into("title", encode.html(_"Member '#{member}'":gsub("#{member}", member.name))) 25.5 25.6 slot.select("actions", function() 25.7 - if member.id == app.session.member.id then 25.8 - else 25.9 + if not (member.id == app.session.member.id) then 25.10 +if not member.active then 25.11 + ui.tag{ 25.12 + tag = "div", 25.13 + attr = { class = "interest deactivated_member_info" }, 25.14 + content = _"This member is deactivated." 25.15 + } 25.16 + slot.put(" ") 25.17 +end 25.18 --TODO performance 25.19 local contact = Contact:by_pk(app.session.member.id, member.id) 25.20 if contact then 25.21 @@ -39,7 +46,7 @@ 25.22 } 25.23 } 25.24 } 25.25 - else 25.26 + elseif member.active then 25.27 ui.link{ 25.28 image = { static = "icons/16/book_add.png" }, 25.29 text = _"Add to my contacts",
26.1 --- a/app/main/member/show_tab.lua Wed May 26 15:47:52 2010 +0200 26.2 +++ b/app/main/member/show_tab.lua Thu Jul 08 18:44:02 2010 +0200 26.3 @@ -19,6 +19,18 @@ 26.4 26.5 if show_as_homepage and app.session.member_id == member.id then 26.6 26.7 + if app.session.member.notify_email_unconfirmed then 26.8 + tabs[#tabs+1] = { 26.9 + class = "yellow", 26.10 + name = "email_unconfirmed", 26.11 + label = _"Email unconfirmed", 26.12 + icon = { static = "icons/16/bell.png" }, 26.13 + module = "member", 26.14 + view = "_email_unconfirmed", 26.15 + params = {} 26.16 + } 26.17 + end 26.18 + 26.19 if config.motd_intern then 26.20 tabs[#tabs+1] = { 26.21 class = "yellow", 26.22 @@ -93,6 +105,7 @@ 26.23 :join("issue", "_issue_state", "_issue_state.id = initiative.issue_id AND _issue_state.closed ISNULL AND _issue_state.fully_frozen ISNULL") 26.24 :join("current_draft", "_current_draft", "_current_draft.initiative_id = initiative.id") 26.25 :join("supporter", "supporter", { "supporter.member_id = ? AND supporter.initiative_id = initiative.id AND supporter.draft_id < _current_draft.id", app.session.member_id }) 26.26 + :add_where("initiative.revoked ISNULL") 26.27 26.28 if updated_drafts_selector:count() > 0 then 26.29 tabs[#tabs+1] = {
27.1 --- a/config/default.lua Wed May 26 15:47:52 2010 +0200 27.2 +++ b/config/default.lua Thu Jul 08 18:44:02 2010 +0200 27.3 @@ -1,5 +1,5 @@ 27.4 config.app_name = "LiquidFeedback" 27.5 -config.app_version = "beta18" 27.6 +config.app_version = "beta19" 27.7 27.8 config.app_title = config.app_name .. " (" .. request.get_config_name() .. " environment)" 27.9 27.10 @@ -32,7 +32,7 @@ 27.11 27.12 config.api_enabled = false 27.13 27.14 -config.feature_rss_enabled = true 27.15 +config.feature_rss_enabled = false -- feature is broken 27.16 27.17 -- OpenID authentication is not fully implemented yet, DO NOT USE BEFORE THIS NOTICE HAS BEEN REMOVED! 27.18 config.auth_openid_enabled = false
28.1 --- a/env/util/autoapi.lua Wed May 26 15:47:52 2010 +0200 28.2 +++ b/env/util/autoapi.lua Thu Jul 08 18:44:02 2010 +0200 28.3 @@ -1,11 +1,12 @@ 28.4 function util.autoapi_xml(args) 28.5 + local relation_name = assert(args.relation_name) 28.6 local selector = assert(args.selector) 28.7 local fields = assert(args.fields) 28.8 local rows = selector:exec() 28.9 - slot.set_layout("xml") 28.10 - slot.put("<initiative_list>\n") 28.11 + slot.set_layout("xml", "application/xml") 28.12 + slot.put("<", relation_name, "_list>\n") 28.13 for i_row, row in ipairs(rows) do 28.14 - slot.put(" <initiative>\n") 28.15 + slot.put(" <", relation_name, ">\n") 28.16 for i_field, field in ipairs(fields) do 28.17 slot.put(" <", field.name, ">") 28.18 local value 28.19 @@ -21,36 +22,44 @@ 28.20 end 28.21 slot.put("</", field.name, ">\n") 28.22 end 28.23 - slot.put(" </initiative>\n") 28.24 + slot.put(" </", relation_name, ">\n") 28.25 end 28.26 - slot.put("</initiative_list>\n") 28.27 + slot.put("</", relation_name, "_list>\n") 28.28 end 28.29 28.30 function util.autoapi_json(args) 28.31 - slot.set_layout("blank") 28.32 + slot.set_layout("blank", "application/json") 28.33 local selector = assert(args.selector) 28.34 local fields = assert(args.fields) 28.35 local rows = selector:exec() 28.36 - slot.put("{\n") 28.37 + slot.put("[\n") 28.38 for i_row, row in ipairs(rows) do 28.39 slot.put(" {\n") 28.40 for i_field, field in ipairs(fields) do 28.41 - slot.put(" ", field.name, ": ") 28.42 + slot.put(" \"", field.name, "\": ") 28.43 local value 28.44 if field.func then 28.45 value = field.func(row) 28.46 elseif field.field then 28.47 value = row[field.name] 28.48 end 28.49 - slot.put(encode.json(value)) 28.50 - slot.put(",\n") 28.51 + slot.put(encode.json(value)) 28.52 + if i_field < #fields then 28.53 + slot.put(",") 28.54 + end 28.55 + slot.put("\n") 28.56 end 28.57 - slot.put(" },\n") 28.58 + slot.put(" }") 28.59 + if i_row < #rows then 28.60 + slot.put(",") 28.61 + end 28.62 + slot.put("\n") 28.63 end 28.64 - slot.put("}\n") 28.65 + slot.put("]\n") 28.66 end 28.67 28.68 function util.autoapi(args) 28.69 + local relation_name = assert(args.relation_name) 28.70 local selector = assert(args.selector) 28.71 local fields = assert(args.fields) 28.72 local api_engine = assert(args.api_engine) 28.73 @@ -65,6 +74,7 @@ 28.74 28.75 if api_engine == "xml" then 28.76 util.autoapi_xml{ 28.77 + relation_name = relation_name, 28.78 selector = selector, 28.79 fields = fields 28.80 }
29.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 29.2 +++ b/locale/help/member.settings.email_address.de.txt Thu Jul 08 18:44:02 2010 +0200 29.3 @@ -0,0 +1,1 @@ 29.4 +Diese E-Mail-Adresse kann für automatische Nachrichten des Systems sowie für die Kontaktaufnahme durch die Administratoren verwendet werden und wird anderen Benutzern nicht angezeigt. Wenn Du die Adresse änderst, erhälts Du eine E-Mail mit einem Bestätigungslink, den du anklicken musst.
32.1 --- a/locale/translations.de.lua Wed May 26 15:47:52 2010 +0200 32.2 +++ b/locale/translations.de.lua Thu Jul 08 18:44:02 2010 +0200 32.3 @@ -77,6 +77,8 @@ 32.4 ["Change API key"] = "API-Schlüssel ändern"; 32.5 ["Change area delegation"] = "Delegation für Themenbereich ändern"; 32.6 ["Change display settings"] = "Anzeige-Einstellungen ändern"; 32.7 +["Change email"] = "E-Mail-Adresse ändern"; 32.8 +["Change email address"] = "E-Mail-Adresse ändern"; 32.9 ["Change filters and order"] = "Filter und Sortierung ändern"; 32.10 ["Change global delegation"] = "Globale Delegation ändern"; 32.11 ["Change issue delegation"] = "Delegation für Thema ändern"; 32.12 @@ -87,6 +89,7 @@ 32.13 ["Change vote"] = "Abstimmung ändern"; 32.14 ["Change your login"] = "Deinen Anmeldenamen ändern"; 32.15 ["Change your name"] = "Deinen Namen ändern"; 32.16 +["Change your notification email address"] = "Deine E-Mail-Adresse für Benachrichtigungen ändern"; 32.17 ["Change your password"] = "Dein Kennwort ändern"; 32.18 ["Choose initiator"] = "Initiator auswählen"; 32.19 ["Choose member"] = "Mitglied auswählen"; 32.20 @@ -98,6 +101,7 @@ 32.21 ["Confirm"] = "Bestätigen"; 32.22 ["Confirmation code"] = "Bestätigungscode"; 32.23 ["Confirmation code invalid!"] = "Bestätigungscode ist ungültig!"; 32.24 +["Confirmed address"] = "Bestätigte E-Mail"; 32.25 ["Contacts"] = "Kontakte"; 32.26 ["Content"] = "Inhalt"; 32.27 ["Counting of votes"] = "Auszählung"; 32.28 @@ -109,13 +113,14 @@ 32.29 ["Current votings in areas you are member of and issues you are interested in:"] = "Jetzt laufende Abstimmungen zu Themen aus Deinen Themenbereichen oder solchen an denen Du interessiert bist:"; 32.30 ["Currently no API key is set."] = "Zur Zeit ist kein API-Schlüssel festgelegt."; 32.31 ["Date"] = "Datum"; 32.32 +["Date format is not valid. Please use following format: YYYY-MM-DD"] = "Datumsformat nicht korrekt. Bitte verwende: JJJJ-MM-TT, also z.B. 1945-05-23"; 32.33 ["Degree"] = "Grad"; 32.34 ["Delegations"] = "Delegationen"; 32.35 ["Delete API key"] = "API-Schlüssel löschen"; 32.36 ["Delete filter"] = "Filter löschen"; 32.37 ["Description"] = "Beschreibung"; 32.38 ["Details"] = "Details"; 32.39 -["Developer features"] = "Entwicklerfunktionen"; 32.40 +["Developer settings"] = "Einstellungen für Entwickler"; 32.41 ["Diff"] = "Differenz"; 32.42 ["Direct member count"] = "Anzahl Direktmitglieder"; 32.43 ["Direct membership"] = "Direkte Mitgliedschaft"; 32.44 @@ -149,7 +154,9 @@ 32.45 ["Email address is confirmed now"] = "E-Mail-Adresse ist jetzt bestätigt"; 32.46 ["Email address too short!"] = "E-Mail-Adresse ist zu kurz!"; 32.47 ["Email confirmation request"] = "Bestätigung Deiner E-Mail-Adresse"; 32.48 +["Email unconfirmed"] = "Unbestätigte E-Mail-Adresse"; 32.49 ["Empty help text: #{id}.#{lang}.txt"] = "Leerer Hilfe-Text: #{id}.#{lang}.txt"; 32.50 +["Error while converting image. Please note, that only JPG files are supported!"] = "Fehler beim Konvertieren des Bilds. Bitte beachte, dass nur JPG-Dateien unterstützt werden."; 32.51 ["Error while resolving openid. Internal message: '#{errmsg}'"] = "Fehler beim Auflösen der OpenID. Interne Fehlermeldung: '#{errmsg}'"; 32.52 ["Error while updating member, database reported:<br /><br /> (#{errormessage})"] = "Fehler beim aktualisieren des Mitglieds, die Datenbank berichtet folgenden Fehler:<br /><br /> (#{errormessage})"; 32.53 ["External memberships"] = "Externe Mitgliedschaften"; 32.54 @@ -180,8 +187,8 @@ 32.55 ["In discussion"] = "In Diskussion"; 32.56 ["Incoming delegations"] = "Eingehende Delegationen"; 32.57 ["Information about the available policies"] = "Informationen zu den verfügbaren Regelwerken"; 32.58 -["Initiated"] = "Initiert"; 32.59 -["Initiated initiatives"] = "Initierte Initiativen"; 32.60 +["Initiated"] = "Initiiert"; 32.61 +["Initiated initiatives"] = "Initiierte Initiativen"; 32.62 ["Initiative events"] = "Initiativen-Ereignisse"; 32.63 ["Initiative is revoked now"] = "Initiative ist jetzt zurückgezogen"; 32.64 ["Initiative quorum"] = "Quorum Inititive"; 32.65 @@ -216,7 +223,7 @@ 32.66 ["Issue canceled"] = "Thema abgebrochen"; 32.67 ["Issue delegation"] = "Issue-Delegation"; 32.68 ["Issue delegation active"] = "Delegation für Thema aktiv"; 32.69 -["Issue events"] = "Themen-Ergeignisse"; 32.70 +["Issue events"] = "Themen-Ereignisse"; 32.71 ["Issue finished"] = "Thema abgeschlossen"; 32.72 ["Issue finished without voting"] = "Thema ohne Abstimmung abgeschlossen"; 32.73 ["Issue frozen"] = "Thema eingefroren"; 32.74 @@ -250,6 +257,7 @@ 32.75 ["Member has not approved latest draft"] = "Mitglied hat den letzten Entwurf noch nicht angenommen"; 32.76 ["Member is administrator"] = "Mitglied ist Administrator"; 32.77 ["Member is already saved in your contacts!"] = "Mitglied ist schon in Deinen Kontakten!"; 32.78 +["Member is deactivated"] = "Mitglied ist deaktiviert"; 32.79 ["Member is now invited to be initiator"] = "Mitglied ist jetzt als Initiator eingeladen"; 32.80 ["Member list"] = "Mitgliederliste"; 32.81 ["Member name"] = "Mitglied Name"; 32.82 @@ -275,6 +283,7 @@ 32.83 ["My opinion"] = "Meine Meinung"; 32.84 ["Name"] = "Name"; 32.85 ["New"] = "Neu"; 32.86 +["New address"] = "Neue E-Mail-Adresse"; 32.87 ["New draft"] = "Neuer Entwurf"; 32.88 ["New draft has been added to initiative"] = "Neuer Entwurf wurde der Initiative hinzugefügt"; 32.89 ["New draft revision"] = "Neue Revision des Entwurfs"; 32.90 @@ -302,6 +311,7 @@ 32.91 ["Not voted (revoked from initiator)"] = "Nicht abgestimmt (durch Initiator zurückgezogen)"; 32.92 ["Not voted issues"] = "Nicht abgestimmt"; 32.93 ["Not yet voted"] = "Noch abzustimmen"; 32.94 +["Notification address unconfirmed"] = "E-Mail-Adresse für Benachrichtigungen unbestätigt"; 32.95 ["Number of incoming delegations, follow link to see more details"] = "Anzahl eingehender Delegationen, Link folgen für mehr Details"; 32.96 ["Number of initiatives to preview"] = "Anzahl der Initiativen in der Vorschau"; 32.97 ["OK"] = "OK"; 32.98 @@ -378,6 +388,7 @@ 32.99 ["Remove my support from this initiative"] = "Meine Unterstützung der Initiative entziehen"; 32.100 ["Repeat new password"] = "Neues Kennwort wiederholen"; 32.101 ["Request password reset link"] = "Link zum Rücksetzen des Kennworts anfordern"; 32.102 +["Resend activation email to '#{email}'"] = "E-Mail mit Aktivierungslink erneut an '#{email}' senden"; 32.103 ["Reset code"] = "Rücksetzcode"; 32.104 ["Reset code is invalid!"] = "Rücksetzcode ist ungültig"; 32.105 ["Reset link has been send for this member"] = "Rücksetz-Link wurde versendet"; 32.106 @@ -457,6 +468,7 @@ 32.107 ["The initiators suggest to support the following initiative:"] = "Die Initiatoren empfehlen folgende Initiative zu unterstützen:"; 32.108 ["There are no more alternative initiatives currently."] = "Es gibt zur Zeit keine weiteren alternative Initiative."; 32.109 ["There were no more alternative initiatives."] = "Es gab keine weiteren alternativen Initiativen."; 32.110 +["This email address is too short!"] = "Diese E-Mail-Adresse ist zu kurz!"; 32.111 ["This identifier is not allowed for this instance."] = "Dieser Identifier ist für diese Instanz nicht zugelassen."; 32.112 ["This initiative"] = "Diese Initiative"; 32.113 ["This initiative compared to alternative initiatives"] = "Diese Initiative im Vergleich zu alternativen Initiativen"; 32.114 @@ -475,6 +487,7 @@ 32.115 ["This member has rejected to become initiator of this initiative"] = "Dieses Mitglied hat die Einladung, Initiator zu werden, abgelehnt"; 32.116 ["This member is already initiator of this initiative"] = "Dieses Mitglied ist bereits Initiator dieser Initiative"; 32.117 ["This member is already invited to become initiator of this initiative"] = "Dieses Mitglied ist bereits eingeladen Initiator dieser Initiative zu werden"; 32.118 +["This member is deactivated."] = "Dieses Mitglied ist deaktiviert."; 32.119 ["This member is participating, the rest of delegation chain is suspended while discussing"] = "Dieses Mitglied partizipiert, Rest der Delegationskette während der Diskussion ausgesetzt."; 32.120 ["This name is already taken, please choose another one!"] = "Dieser Name ist bereits vergeben, bitte wähle einen anderen!"; 32.121 ["This name is really too short!"] = "Dieser Name ist wirklich zu kurz!"; 32.122 @@ -493,6 +506,7 @@ 32.123 ["Trustee"] = "Bevollmächtigter"; 32.124 ["Tuesday"] = "Dienstag"; 32.125 ["Type of tabs"] = "Tabulatortyp"; 32.126 +["Unconfirmed address"] = "Unbestätigte E-Mail"; 32.127 ["Unknown author"] = "Unbekannter Autor"; 32.128 ["Updated drafts"] = "Neue Entwürfe"; 32.129 ["Upload images"] = "Bilder hochladen"; 32.130 @@ -515,6 +529,8 @@ 32.131 ["Voting request updated"] = "Abstimmungswunsch aktualisiert"; 32.132 ["Voting started"] = "Abstimmung begonnen"; 32.133 ["Voting time"] = "Zeit für die Abstimmung"; 32.134 +["We couldn't deliver a confirmation mail to this address. Please check entered email address."] = "Wir konnten keine Bestätigungs-E-Mail versenden. Bitte überprüfe die E-Mail-Adresse."; 32.135 +["We have sent an email with activation link already in the last hour. Please try again later."] = "Wir haben bereits innerhalb der letzten Stunde eine E-Mail mit Bestätigungslink gesendet. Bitte versuche es später erneut."; 32.136 ["Website"] = "Webseite"; 32.137 ["Wednesday"] = "Mittwoch"; 32.138 ["Wiki engine"] = "Wiki engine"; 32.139 @@ -531,7 +547,11 @@ 32.140 ["You are now initiator of this initiative"] = "Du bist jetzt Initiator dieser Initiative"; 32.141 ["You are potential supporter of this initiative"] = "Du bist potentieller Unterstützer dieser Initiative"; 32.142 ["You are supporting this initiative"] = "Du unterstützt diese Initiative"; 32.143 +["You can change the following settings:"] = "Du kannst die folgenden Einstellungen vornehmen:"; 32.144 +["You can change your email address only once per hour. Please try again later."] = "Du kannst die E-Mail-Adresse nur einmal in der Stunde ändern, bitte versuche es später erneut."; 32.145 ["You can't suggest the initiative you are revoking"] = "Du kannst nicht die Initiative empfehlen, die Du löschen möchtest"; 32.146 +["You didn't confirmed your email address '#{email}' within 7 days."] = "Du hast die E-Mail-Adresse '#{email}' nicht innerhalb von 7 Tagen bestätigt."; 32.147 +["You didn't confirmed your email address '#{email}'. You have received an email with an activation link."] = "Du hast die E-Mail-Adresse '#{email}' nicht bestätigt. Du hast hierzu eine E-Mail mit einem Aktivierungslink erhalten."; 32.148 ["You didn't saved any member as contact yet."] = "Du hast noch kein Mitglied als Kontakt gespeichert!"; 32.149 ["You have saved this member as contact"] = "Du hast das Mitglied als Kontakt gespeichert"; 32.150 ["You have saved this member as contact."] = "Du hast das Mitglied als Kontakt gespeichert."; 32.151 @@ -549,6 +569,7 @@ 32.152 ["Your delegation for this issue has been deleted."] = "Deine Delegation für dieses Thema wurde gelöscht"; 32.153 ["Your delegation for this issue has been updated."] = "Deine Delegation für dieses Thema wurde geändert"; 32.154 ["Your display settings have been updated"] = "Deine Anzeige-Einstellungen wurden aktualisiert"; 32.155 +["Your email address has been changed, please check for confirmation email with activation link!"] = "Deine E-Mail-Adresse wurde geändert, du hast eine Bestätigungs-E-Mail mit Aktivierungslink erhalten."; 32.156 ["Your global delegation has been deleted."] = "Deine globale Delegation wurde gelöscht"; 32.157 ["Your global delegation has been updated."] = "Deine globale Delegation wurde geändert"; 32.158 ["Your login has been changed to '#{login}'"] = "Dein Anmeldename wurde auf '#{login}' geändert";
33.1 --- a/locale/translations.en.lua Wed May 26 15:47:52 2010 +0200 33.2 +++ b/locale/translations.en.lua Thu Jul 08 18:44:02 2010 +0200 33.3 @@ -77,6 +77,8 @@ 33.4 ["Change API key"] = false; 33.5 ["Change area delegation"] = false; 33.6 ["Change display settings"] = false; 33.7 +["Change email"] = false; 33.8 +["Change email address"] = false; 33.9 ["Change filters and order"] = false; 33.10 ["Change global delegation"] = false; 33.11 ["Change issue delegation"] = false; 33.12 @@ -87,6 +89,7 @@ 33.13 ["Change vote"] = false; 33.14 ["Change your login"] = false; 33.15 ["Change your name"] = false; 33.16 +["Change your notification email address"] = false; 33.17 ["Change your password"] = false; 33.18 ["Choose initiator"] = false; 33.19 ["Choose member"] = false; 33.20 @@ -98,6 +101,7 @@ 33.21 ["Confirm"] = false; 33.22 ["Confirmation code"] = false; 33.23 ["Confirmation code invalid!"] = false; 33.24 +["Confirmed address"] = false; 33.25 ["Contacts"] = false; 33.26 ["Content"] = false; 33.27 ["Counting of votes"] = false; 33.28 @@ -109,13 +113,14 @@ 33.29 ["Current votings in areas you are member of and issues you are interested in:"] = false; 33.30 ["Currently no API key is set."] = false; 33.31 ["Date"] = false; 33.32 +["Date format is not valid. Please use following format: YYYY-MM-DD"] = false; 33.33 ["Degree"] = false; 33.34 ["Delegations"] = false; 33.35 ["Delete API key"] = false; 33.36 ["Delete filter"] = false; 33.37 ["Description"] = false; 33.38 ["Details"] = false; 33.39 -["Developer features"] = false; 33.40 +["Developer settings"] = false; 33.41 ["Diff"] = false; 33.42 ["Direct member count"] = false; 33.43 ["Direct membership"] = false; 33.44 @@ -149,7 +154,9 @@ 33.45 ["Email address is confirmed now"] = false; 33.46 ["Email address too short!"] = false; 33.47 ["Email confirmation request"] = false; 33.48 +["Email unconfirmed"] = false; 33.49 ["Empty help text: #{id}.#{lang}.txt"] = false; 33.50 +["Error while converting image. Please note, that only JPG files are supported!"] = false; 33.51 ["Error while resolving openid. Internal message: '#{errmsg}'"] = false; 33.52 ["Error while updating member, database reported:<br /><br /> (#{errormessage})"] = false; 33.53 ["External memberships"] = false; 33.54 @@ -250,6 +257,7 @@ 33.55 ["Member has not approved latest draft"] = false; 33.56 ["Member is administrator"] = false; 33.57 ["Member is already saved in your contacts!"] = false; 33.58 +["Member is deactivated"] = false; 33.59 ["Member is now invited to be initiator"] = false; 33.60 ["Member list"] = false; 33.61 ["Member name"] = false; 33.62 @@ -275,6 +283,7 @@ 33.63 ["My opinion"] = false; 33.64 ["Name"] = false; 33.65 ["New"] = false; 33.66 +["New address"] = false; 33.67 ["New draft"] = false; 33.68 ["New draft has been added to initiative"] = false; 33.69 ["New draft revision"] = false; 33.70 @@ -302,6 +311,7 @@ 33.71 ["Not voted (revoked from initiator)"] = false; 33.72 ["Not voted issues"] = false; 33.73 ["Not yet voted"] = false; 33.74 +["Notification address unconfirmed"] = false; 33.75 ["Number of incoming delegations, follow link to see more details"] = false; 33.76 ["Number of initiatives to preview"] = false; 33.77 ["OK"] = false; 33.78 @@ -378,6 +388,7 @@ 33.79 ["Remove my support from this initiative"] = false; 33.80 ["Repeat new password"] = false; 33.81 ["Request password reset link"] = false; 33.82 +["Resend activation email to '#{email}'"] = false; 33.83 ["Reset code"] = false; 33.84 ["Reset code is invalid!"] = false; 33.85 ["Reset link has been send for this member"] = false; 33.86 @@ -457,6 +468,7 @@ 33.87 ["The initiators suggest to support the following initiative:"] = false; 33.88 ["There are no more alternative initiatives currently."] = false; 33.89 ["There were no more alternative initiatives."] = false; 33.90 +["This email address is too short!"] = false; 33.91 ["This identifier is not allowed for this instance."] = false; 33.92 ["This initiative"] = false; 33.93 ["This initiative compared to alternative initiatives"] = false; 33.94 @@ -475,6 +487,7 @@ 33.95 ["This member has rejected to become initiator of this initiative"] = false; 33.96 ["This member is already initiator of this initiative"] = false; 33.97 ["This member is already invited to become initiator of this initiative"] = false; 33.98 +["This member is deactivated."] = false; 33.99 ["This member is participating, the rest of delegation chain is suspended while discussing"] = false; 33.100 ["This name is already taken, please choose another one!"] = false; 33.101 ["This name is really too short!"] = false; 33.102 @@ -493,6 +506,7 @@ 33.103 ["Trustee"] = false; 33.104 ["Tuesday"] = false; 33.105 ["Type of tabs"] = false; 33.106 +["Unconfirmed address"] = false; 33.107 ["Unknown author"] = false; 33.108 ["Updated drafts"] = false; 33.109 ["Upload images"] = false; 33.110 @@ -515,6 +529,8 @@ 33.111 ["Voting request updated"] = false; 33.112 ["Voting started"] = false; 33.113 ["Voting time"] = false; 33.114 +["We couldn't deliver a confirmation mail to this address. Please check entered email address."] = false; 33.115 +["We have sent an email with activation link already in the last hour. Please try again later."] = false; 33.116 ["Website"] = false; 33.117 ["Wednesday"] = false; 33.118 ["Wiki engine"] = false; 33.119 @@ -531,7 +547,11 @@ 33.120 ["You are now initiator of this initiative"] = false; 33.121 ["You are potential supporter of this initiative"] = false; 33.122 ["You are supporting this initiative"] = false; 33.123 +["You can change the following settings:"] = false; 33.124 +["You can change your email address only once per hour. Please try again later."] = false; 33.125 ["You can't suggest the initiative you are revoking"] = false; 33.126 +["You didn't confirmed your email address '#{email}' within 7 days."] = false; 33.127 +["You didn't confirmed your email address '#{email}'. You have received an email with an activation link."] = false; 33.128 ["You didn't saved any member as contact yet."] = false; 33.129 ["You have saved this member as contact"] = false; 33.130 ["You have saved this member as contact."] = false; 33.131 @@ -549,6 +569,7 @@ 33.132 ["Your delegation for this issue has been deleted."] = false; 33.133 ["Your delegation for this issue has been updated."] = false; 33.134 ["Your display settings have been updated"] = false; 33.135 +["Your email address has been changed, please check for confirmation email with activation link!"] = false; 33.136 ["Your global delegation has been deleted."] = false; 33.137 ["Your global delegation has been updated."] = false; 33.138 ["Your login has been changed to '#{login}'"] = false;
34.1 --- a/locale/translations.eo.lua Wed May 26 15:47:52 2010 +0200 34.2 +++ b/locale/translations.eo.lua Thu Jul 08 18:44:02 2010 +0200 34.3 @@ -77,6 +77,8 @@ 34.4 ["Change API key"] = "Ŝanĝi API-ŝlosilon"; 34.5 ["Change area delegation"] = "Ŝanĝi delegacion por temaro"; 34.6 ["Change display settings"] = "Ŝanĝi afiŝajn agordojn"; 34.7 +["Change email"] = false; 34.8 +["Change email address"] = false; 34.9 ["Change filters and order"] = "Ŝanĝi filtrojn kaj ordon"; 34.10 ["Change global delegation"] = "Ŝanĝi ĝeneralan delegacion"; 34.11 ["Change issue delegation"] = "Ŝanĝi delegacion por la temo"; 34.12 @@ -87,6 +89,7 @@ 34.13 ["Change vote"] = "Sangi baloton"; 34.14 ["Change your login"] = "Ŝanĝi vian salutnomon"; 34.15 ["Change your name"] = "Ŝanĝi vian nomon"; 34.16 +["Change your notification email address"] = false; 34.17 ["Change your password"] = "Ŝanĝi vian pasvorton"; 34.18 ["Choose initiator"] = "Elekti inicianton"; 34.19 ["Choose member"] = "Elekti membron"; 34.20 @@ -98,6 +101,7 @@ 34.21 ["Confirm"] = "Konfirmi"; 34.22 ["Confirmation code"] = "Konfirmokodon"; 34.23 ["Confirmation code invalid!"] = "La konfirmokodo estas malvalida!"; 34.24 +["Confirmed address"] = false; 34.25 ["Contacts"] = "Kontaktoj"; 34.26 ["Content"] = "Enhavo"; 34.27 ["Counting of votes"] = "Nombrado de voĉoj"; 34.28 @@ -109,13 +113,14 @@ 34.29 ["Current votings in areas you are member of and issues you are interested in:"] = "Aktualaj voĉdonoj pri temoj en kiuj vi membras kaj kiuj vin interesas:"; 34.30 ["Currently no API key is set."] = "Nuntempe ne ekzistas API-ŝlosilo"; 34.31 ["Date"] = "Dato"; 34.32 +["Date format is not valid. Please use following format: YYYY-MM-DD"] = false; 34.33 ["Degree"] = "Grado"; 34.34 ["Delegations"] = "Delegacioj"; 34.35 ["Delete API key"] = "Forviŝi API-ŝlosilon"; 34.36 ["Delete filter"] = "Forviŝi filtron"; 34.37 ["Description"] = "Priskribo"; 34.38 ["Details"] = "Detaloj"; 34.39 -["Developer features"] = "Porprogramistaj funkcioj"; 34.40 +["Developer settings"] = false; 34.41 ["Diff"] = "Diferenco"; 34.42 ["Direct member count"] = "Nombro de la rektaj membroj"; 34.43 ["Direct membership"] = "Rekta membreco"; 34.44 @@ -149,7 +154,9 @@ 34.45 ["Email address is confirmed now"] = "Retadreso nun estas konfirmita"; 34.46 ["Email address too short!"] = "Retadreso estas tro mallonga!"; 34.47 ["Email confirmation request"] = "Konfirmopeto de via retadreso"; 34.48 +["Email unconfirmed"] = false; 34.49 ["Empty help text: #{id}.#{lang}.txt"] = "Malplena helpoteksto: #{id}.#{lang}.txt"; 34.50 +["Error while converting image. Please note, that only JPG files are supported!"] = false; 34.51 ["Error while resolving openid. Internal message: '#{errmsg}'"] = "Eraro dum trovado de openid. Interna mesaĝo: '#{errmsg}'"; 34.52 ["Error while updating member, database reported:<br /><br /> (#{errormessage})"] = "Eraro dum ĝisdatigo de la membro, la datumbazo raportas sekvan eraron:<br /><br /> (#{errormessage})"; 34.53 ["External memberships"] = "Eksteraj membrecoj"; 34.54 @@ -250,6 +257,7 @@ 34.55 ["Member has not approved latest draft"] = "La membro ne konsentis la plej novan skizon"; 34.56 ["Member is administrator"] = "La membro estas administranto"; 34.57 ["Member is already saved in your contacts!"] = "La membro estas jam konservita en viaj kontaktoj!"; 34.58 +["Member is deactivated"] = false; 34.59 ["Member is now invited to be initiator"] = "La membro nun estas invitita kiel inicionto"; 34.60 ["Member list"] = "Membrolisto"; 34.61 ["Member name"] = "Membronomo"; 34.62 @@ -275,6 +283,7 @@ 34.63 ["My opinion"] = "Mia opinio"; 34.64 ["Name"] = "Nomo"; 34.65 ["New"] = "Nova"; 34.66 +["New address"] = false; 34.67 ["New draft"] = "Nova skizo"; 34.68 ["New draft has been added to initiative"] = "La nova skizo estas aldonita al la iniciato"; 34.69 ["New draft revision"] = "Nova revizio de la skizo"; 34.70 @@ -302,6 +311,7 @@ 34.71 ["Not voted (revoked from initiator)"] = "Ne balotinta (retirita de la iniciinto)"; 34.72 ["Not voted issues"] = "Ne balotitaj"; 34.73 ["Not yet voted"] = "Ankoraŭ ne balotinta"; 34.74 +["Notification address unconfirmed"] = false; 34.75 ["Number of incoming delegations, follow link to see more details"] = "Nombro de alvenantaj delegacioj, sekvu ligilon por pli da detaloj"; 34.76 ["Number of initiatives to preview"] = "Nombro de iniciatoj por antaŭmontri"; 34.77 ["OK"] = "Bone"; 34.78 @@ -378,6 +388,7 @@ 34.79 ["Remove my support from this initiative"] = "Forigi mian subtenon de la iniciato"; 34.80 ["Repeat new password"] = "Ripeti novan pasvorton"; 34.81 ["Request password reset link"] = "Demandi ligilon por remeti la pasvorton"; 34.82 +["Resend activation email to '#{email}'"] = false; 34.83 ["Reset code"] = "Remetokodo"; 34.84 ["Reset code is invalid!"] = "La remetokodo estas malvalida!"; 34.85 ["Reset link has been send for this member"] = "Remetoligilo estas dissendita"; 34.86 @@ -457,6 +468,7 @@ 34.87 ["The initiators suggest to support the following initiative:"] = "La iniciintoj rekomendas subteni sekvan iniciaton:"; 34.88 ["There are no more alternative initiatives currently."] = "Aktuale ne ekzistas pliajn alternativajn iniciatojn."; 34.89 ["There were no more alternative initiatives."] = "Ne ekzistis pliajn alternativajn iniciatojn."; 34.90 +["This email address is too short!"] = false; 34.91 ["This identifier is not allowed for this instance."] = "Tiu identigilo ne estas permesita por ĉi tiu instanco."; 34.92 ["This initiative"] = "Tiu iniciato"; 34.93 ["This initiative compared to alternative initiatives"] = "Tiu iniciato komparata al la alternativajn iniciatojn"; 34.94 @@ -475,6 +487,7 @@ 34.95 ["This member has rejected to become initiator of this initiative"] = "Tiu membro rifuzis inviton por esti inicionto"; 34.96 ["This member is already initiator of this initiative"] = "Tiu membro estas jam iniciinto de tiu iniciato"; 34.97 ["This member is already invited to become initiator of this initiative"] = "Tiu membro estis jam invitita por esti inicionto de tiu iniciato"; 34.98 +["This member is deactivated."] = false; 34.99 ["This member is participating, the rest of delegation chain is suspended while discussing"] = "Tiu membro partoprenas, la resta delegaciĉeno estas blokita dum la diskuto"; 34.100 ["This name is already taken, please choose another one!"] = "Tiu nomo estas jam prenita, bonvolu elekti alian!"; 34.101 ["This name is really too short!"] = "Tiu nomo estas vere tro mallonga!"; 34.102 @@ -493,6 +506,7 @@ 34.103 ["Trustee"] = "Fidulo mastrumanta"; 34.104 ["Tuesday"] = "Mardo"; 34.105 ["Type of tabs"] = "Tipo de langetoj"; 34.106 +["Unconfirmed address"] = false; 34.107 ["Unknown author"] = "Aŭtoro nekonata"; 34.108 ["Updated drafts"] = "Skizoj ĝisdatigitaj"; 34.109 ["Upload images"] = "Alŝuti bildojn"; 34.110 @@ -515,6 +529,8 @@ 34.111 ["Voting request updated"] = "Voĉdono-peto ĝisdatigita"; 34.112 ["Voting started"] = "Voĉdono komenciĝis"; 34.113 ["Voting time"] = "Tempo por la voĉdono"; 34.114 +["We couldn't deliver a confirmation mail to this address. Please check entered email address."] = false; 34.115 +["We have sent an email with activation link already in the last hour. Please try again later."] = false; 34.116 ["Website"] = "Retpaĝo"; 34.117 ["Wednesday"] = "Merkredo"; 34.118 ["Wiki engine"] = "Viki-modulo"; 34.119 @@ -522,7 +538,7 @@ 34.120 ["You are already initator"] = "Vi estas jam iniciinto"; 34.121 ["You are already not supporting this initiative"] = "Vi ankoraŭ ne subtenas tiun iniciaton"; 34.122 ["You are already supporting the latest draft"] = "Vi jam subtenas la plej novan skizon"; 34.123 -["You are currently not invited to any initiative."] = "Vi aktuale estas invitita al neniu iniciato."; 34.124 +["You are currently not invited to any initiative."] = "Vi aktuale estas invitita al neniu iniciato."; 34.125 ["You are currently not supporting this initiative. By adding suggestions to this initiative you will automatically become a potential supporter."] = "Vi aktuale ne subtenas tiun iniciaton. Se vi aldonas sugeston al tiu iniciato vi estos aŭtomate eventuala subtenonto!"; 34.126 ["You are iniator of this initiative"] = "Vi estas iniciinto de tiu iniciato"; 34.127 ["You are interested in this issue"] = "Vin interesas tiu temo"; 34.128 @@ -531,7 +547,11 @@ 34.129 ["You are now initiator of this initiative"] = "Vi nun estas iniciinto de tiu iniciato"; 34.130 ["You are potential supporter of this initiative"] = "Vi estas eventuala subtenanto de tiu iniciato"; 34.131 ["You are supporting this initiative"] = "Vi subtenas tiun iniciaton"; 34.132 +["You can change the following settings:"] = false; 34.133 +["You can change your email address only once per hour. Please try again later."] = false; 34.134 ["You can't suggest the initiative you are revoking"] = "Vi ne povas rekomendi la iniciaton, kiun vi nuligas"; 34.135 +["You didn't confirmed your email address '#{email}' within 7 days."] = false; 34.136 +["You didn't confirmed your email address '#{email}'. You have received an email with an activation link."] = false; 34.137 ["You didn't saved any member as contact yet."] = "Vi ankoraŭ ne konservis membron kiel kontakton!"; 34.138 ["You have saved this member as contact"] = "Vi konservis membron kiel kontakton"; 34.139 ["You have saved this member as contact."] = "Vi konservis membron kiel kontakton."; 34.140 @@ -549,6 +569,7 @@ 34.141 ["Your delegation for this issue has been deleted."] = "Via delegacio por tiu temo estas viŝita"; 34.142 ["Your delegation for this issue has been updated."] = "Via delegacio por tiu temo estas ĝisdatigita"; 34.143 ["Your display settings have been updated"] = "Viaj afiŝaj-agordoj estas ĝisdatigitaj"; 34.144 +["Your email address has been changed, please check for confirmation email with activation link!"] = false; 34.145 ["Your global delegation has been deleted."] = "Via ĝenerala delegacio estas viŝita"; 34.146 ["Your global delegation has been updated."] = "Via ĝenerala delegacio estas ĝisdatigita"; 34.147 ["Your login has been changed to '#{login}'"] = "Via salutnomo estas ĝisdatigita al '#{login}'";
35.1 --- a/locale/translations.fr.lua Wed May 26 15:47:52 2010 +0200 35.2 +++ b/locale/translations.fr.lua Thu Jul 08 18:44:02 2010 +0200 35.3 @@ -77,6 +77,8 @@ 35.4 ["Change API key"] = false; 35.5 ["Change area delegation"] = false; 35.6 ["Change display settings"] = false; 35.7 +["Change email"] = false; 35.8 +["Change email address"] = false; 35.9 ["Change filters and order"] = false; 35.10 ["Change global delegation"] = false; 35.11 ["Change issue delegation"] = false; 35.12 @@ -87,6 +89,7 @@ 35.13 ["Change vote"] = false; 35.14 ["Change your login"] = false; 35.15 ["Change your name"] = false; 35.16 +["Change your notification email address"] = false; 35.17 ["Change your password"] = false; 35.18 ["Choose initiator"] = false; 35.19 ["Choose member"] = false; 35.20 @@ -98,6 +101,7 @@ 35.21 ["Confirm"] = false; 35.22 ["Confirmation code"] = false; 35.23 ["Confirmation code invalid!"] = false; 35.24 +["Confirmed address"] = false; 35.25 ["Contacts"] = false; 35.26 ["Content"] = false; 35.27 ["Counting of votes"] = false; 35.28 @@ -109,13 +113,14 @@ 35.29 ["Current votings in areas you are member of and issues you are interested in:"] = false; 35.30 ["Currently no API key is set."] = false; 35.31 ["Date"] = false; 35.32 +["Date format is not valid. Please use following format: YYYY-MM-DD"] = false; 35.33 ["Degree"] = false; 35.34 ["Delegations"] = false; 35.35 ["Delete API key"] = false; 35.36 ["Delete filter"] = false; 35.37 ["Description"] = false; 35.38 ["Details"] = false; 35.39 -["Developer features"] = false; 35.40 +["Developer settings"] = false; 35.41 ["Diff"] = false; 35.42 ["Direct member count"] = false; 35.43 ["Direct membership"] = false; 35.44 @@ -149,7 +154,9 @@ 35.45 ["Email address is confirmed now"] = false; 35.46 ["Email address too short!"] = false; 35.47 ["Email confirmation request"] = false; 35.48 +["Email unconfirmed"] = false; 35.49 ["Empty help text: #{id}.#{lang}.txt"] = false; 35.50 +["Error while converting image. Please note, that only JPG files are supported!"] = false; 35.51 ["Error while resolving openid. Internal message: '#{errmsg}'"] = false; 35.52 ["Error while updating member, database reported:<br /><br /> (#{errormessage})"] = false; 35.53 ["External memberships"] = false; 35.54 @@ -250,6 +257,7 @@ 35.55 ["Member has not approved latest draft"] = false; 35.56 ["Member is administrator"] = false; 35.57 ["Member is already saved in your contacts!"] = false; 35.58 +["Member is deactivated"] = false; 35.59 ["Member is now invited to be initiator"] = false; 35.60 ["Member list"] = false; 35.61 ["Member name"] = false; 35.62 @@ -275,6 +283,7 @@ 35.63 ["My opinion"] = false; 35.64 ["Name"] = false; 35.65 ["New"] = false; 35.66 +["New address"] = false; 35.67 ["New draft"] = false; 35.68 ["New draft has been added to initiative"] = false; 35.69 ["New draft revision"] = false; 35.70 @@ -302,6 +311,7 @@ 35.71 ["Not voted (revoked from initiator)"] = false; 35.72 ["Not voted issues"] = false; 35.73 ["Not yet voted"] = false; 35.74 +["Notification address unconfirmed"] = false; 35.75 ["Number of incoming delegations, follow link to see more details"] = false; 35.76 ["Number of initiatives to preview"] = false; 35.77 ["OK"] = false; 35.78 @@ -378,6 +388,7 @@ 35.79 ["Remove my support from this initiative"] = false; 35.80 ["Repeat new password"] = false; 35.81 ["Request password reset link"] = false; 35.82 +["Resend activation email to '#{email}'"] = false; 35.83 ["Reset code"] = false; 35.84 ["Reset code is invalid!"] = false; 35.85 ["Reset link has been send for this member"] = false; 35.86 @@ -457,6 +468,7 @@ 35.87 ["The initiators suggest to support the following initiative:"] = false; 35.88 ["There are no more alternative initiatives currently."] = false; 35.89 ["There were no more alternative initiatives."] = false; 35.90 +["This email address is too short!"] = false; 35.91 ["This identifier is not allowed for this instance."] = false; 35.92 ["This initiative"] = false; 35.93 ["This initiative compared to alternative initiatives"] = false; 35.94 @@ -475,6 +487,7 @@ 35.95 ["This member has rejected to become initiator of this initiative"] = false; 35.96 ["This member is already initiator of this initiative"] = false; 35.97 ["This member is already invited to become initiator of this initiative"] = false; 35.98 +["This member is deactivated."] = false; 35.99 ["This member is participating, the rest of delegation chain is suspended while discussing"] = false; 35.100 ["This name is already taken, please choose another one!"] = false; 35.101 ["This name is really too short!"] = false; 35.102 @@ -493,6 +506,7 @@ 35.103 ["Trustee"] = false; 35.104 ["Tuesday"] = false; 35.105 ["Type of tabs"] = false; 35.106 +["Unconfirmed address"] = false; 35.107 ["Unknown author"] = false; 35.108 ["Updated drafts"] = false; 35.109 ["Upload images"] = false; 35.110 @@ -515,6 +529,8 @@ 35.111 ["Voting request updated"] = false; 35.112 ["Voting started"] = false; 35.113 ["Voting time"] = false; 35.114 +["We couldn't deliver a confirmation mail to this address. Please check entered email address."] = false; 35.115 +["We have sent an email with activation link already in the last hour. Please try again later."] = false; 35.116 ["Website"] = false; 35.117 ["Wednesday"] = false; 35.118 ["Wiki engine"] = false; 35.119 @@ -531,7 +547,11 @@ 35.120 ["You are now initiator of this initiative"] = false; 35.121 ["You are potential supporter of this initiative"] = false; 35.122 ["You are supporting this initiative"] = false; 35.123 +["You can change the following settings:"] = false; 35.124 +["You can change your email address only once per hour. Please try again later."] = false; 35.125 ["You can't suggest the initiative you are revoking"] = false; 35.126 +["You didn't confirmed your email address '#{email}' within 7 days."] = false; 35.127 +["You didn't confirmed your email address '#{email}'. You have received an email with an activation link."] = false; 35.128 ["You didn't saved any member as contact yet."] = false; 35.129 ["You have saved this member as contact"] = false; 35.130 ["You have saved this member as contact."] = false; 35.131 @@ -549,6 +569,7 @@ 35.132 ["Your delegation for this issue has been deleted."] = false; 35.133 ["Your delegation for this issue has been updated."] = false; 35.134 ["Your display settings have been updated"] = false; 35.135 +["Your email address has been changed, please check for confirmation email with activation link!"] = false; 35.136 ["Your global delegation has been deleted."] = false; 35.137 ["Your global delegation has been updated."] = false; 35.138 ["Your login has been changed to '#{login}'"] = false;
36.1 --- a/model/issue.lua Wed May 26 15:47:52 2010 +0200 36.2 +++ b/model/issue.lua Thu Jul 08 18:44:02 2010 +0200 36.3 @@ -142,23 +142,29 @@ 36.4 :add_group_by('"issue"."vote_now"') 36.5 :add_group_by('"issue"."vote_later"') 36.6 :add_group_by('"issue"."voter_count"') 36.7 + :add_group_by('"issue"."admission_time"') 36.8 + :add_group_by('"issue"."discussion_time"') 36.9 + :add_group_by('"issue"."verification_time"') 36.10 + :add_group_by('"issue"."voting_time"') 36.11 :add_group_by('"_interest"."member_id"') 36.12 --:set_distinct() 36.13 end 36.14 36.15 -function Issue:modify_selector_for_state(state) 36.16 +function Issue:modify_selector_for_state(initiatives_selector, state) 36.17 if state == "new" then 36.18 - initiatives_selector:add_where("issue.accepted ISNULL AND issue.cancelled ISNULL") 36.19 + initiatives_selector:add_where("issue.accepted ISNULL AND issue.closed ISNULL") 36.20 elseif state == "accepted" then 36.21 - initiatives_selector:add_where("issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.cancelled ISNULL") 36.22 + initiatives_selector:add_where("issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL") 36.23 elseif state == "frozen" then 36.24 - initiatives_selector:add_where("issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL AND cancelled ISNULL") 36.25 + initiatives_selector:add_where("issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL AND issue.closed ISNULL") 36.26 elseif state == "voting" then 36.27 - initiatives_selector:add_where("issue.fully_frozen NOTNULL AND issue.finished ISNULL AND issue.cancelled ISNULL") 36.28 + initiatives_selector:add_where("issue.fully_frozen NOTNULL AND issue.closed ISNULL") 36.29 elseif state == "finished" then 36.30 - initiatives_selector:add_where("issue.finished NOTNULL") 36.31 + initiatives_selector:add_where("issue.fully_frozen NOTNULL AND issue.closed NOTNULL") 36.32 elseif state == "cancelled" then 36.33 - initiatives_selector:add_where("issue.cancelled NOTNULL") 36.34 + initiatives_selector:add_where("issue.fully_frozen ISNULL AND issue.closed NOTNULL") 36.35 + else 36.36 + error("Invalid state") 36.37 end 36.38 end 36.39
37.1 --- a/model/member.lua Wed May 26 15:47:52 2010 +0200 37.2 +++ b/model/member.lua Thu Jul 08 18:44:02 2010 +0200 37.3 @@ -308,6 +308,11 @@ 37.4 content_type = "text/plain; charset=UTF-8", 37.5 content = content 37.6 } 37.7 + if success then 37.8 + local lock_expiry = db:query("SELECT now() + '1 hour'::interval AS lock_expiry", "object").lock_expiry 37.9 + self.notify_email_lock_expiry = lock_expiry 37.10 + end 37.11 + self:save() 37.12 return success 37.13 end 37.14 37.15 @@ -354,3 +359,12 @@ 37.16 function Member.object:set_setting_map(key, subkey, value) 37.17 37.18 end 37.19 + 37.20 +function Member.object_get:notify_email_locked() 37.21 + return( 37.22 + Member:new_selector() 37.23 + :add_where{ "id = ?", app.session.member.id } 37.24 + :add_where("notify_email_lock_expiry > now()") 37.25 + :count() == 1 37.26 + ) 37.27 +end 37.28 \ No newline at end of file
38.1 --- a/static/style.css Wed May 26 15:47:52 2010 +0200 38.2 +++ b/static/style.css Thu Jul 08 18:44:02 2010 +0200 38.3 @@ -1081,6 +1081,16 @@ 38.4 margin-top: 0; 38.5 } 38.6 38.7 +.menu_list li { 38.8 + padding-top: 1ex; 38.9 + padding-bottom: 1ex; 38.10 +} 38.11 + 38.12 +.deactivated_member_info { 38.13 + background-color: #a00; 38.14 + color: #fff; 38.15 +} 38.16 + 38.17 /************************************************************************* 38.18 * Voting 38.19 */