# HG changeset patch # User bsw/jbe # Date 1271354305 -7200 # Node ID 88ac7798b562c9feb49e0f9857c68a2a7369c945 # Parent 0849be39114032d43d2cee208320989cfa5ebdf9 Several bugfixes (getpic.c, accepted but canceled issues, ...); Listing of available policies - Bugfixes in fastpath/getpic.c (related to crashes since alpha5) - Respect Content-Types of images in database (needs database update, as Content-Type was incorrectly stored by previous versions) - Typo fixed in help messages - RSS-Feed (currently only after manual authentication while session is valid) - Listing of available policies - German translation fixed: "gebe" -> "gib" (Imperativ) - Bugfixes related to issues which had been accepted but canceled afterwards - Prohibit creation of initiatives in disabled areas or with disabled policies diff -r 0849be391140 -r 88ac7798b562 app/main/_filter/21_auth.lua --- a/app/main/_filter/21_auth.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/app/main/_filter/21_auth.lua Thu Apr 15 19:58:25 2010 +0200 @@ -23,6 +23,7 @@ or request.get_view() == "show" or request.get_view() == "show_tab" ) + or request.get_module() == "policy" and request.get_view() == "show" or request.get_module() == "issue" and request.get_view() == "show" or request.get_module() == "issue" and request.get_view() == "show_tab" or request.get_module() == "initiative" and request.get_view() == "show" diff -r 0849be391140 -r 88ac7798b562 app/main/_filter_view/34_stylesheet.lua --- a/app/main/_filter_view/34_stylesheet.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/app/main/_filter_view/34_stylesheet.lua Thu Apr 15 19:58:25 2010 +0200 @@ -41,7 +41,7 @@ slot.set_layout("blank") end -if request.get_module() ~= "api" then +if request.get_module() ~= "api" and request.get_view() ~= "list_rss" then ui.container{ attr = { class = web20 and "web20" or "web10" diff -r 0849be391140 -r 88ac7798b562 app/main/_layout/atom.html --- a/app/main/_layout/atom.html Sun Apr 04 22:05:11 2010 +0200 +++ b/app/main/_layout/atom.html Thu Apr 15 19:58:25 2010 +0200 @@ -1,12 +1,5 @@ - - foo - - LiquidFeedback - Initiatives - urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6 - 2003-12-14T10:20:09Z diff -r 0849be391140 -r 88ac7798b562 app/main/area/show.lua --- a/app/main/area/show.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/app/main/area/show.lua Thu Apr 15 19:58:25 2010 +0200 @@ -1,5 +1,10 @@ local area = Area:new_selector():add_where{ "id = ?", param.get_id() }:single_object_mode():exec() +if config.feature_rss_enabled then + util.html_rss_head{ title = _"Initiatives in this area (last created first)", module = "initiative", view = "list_rss", params = { area_id = area.id } } + util.html_rss_head{ title = _"Initiatives in this area (last updated first)", module = "initiative", view = "list_rss", params = { area_id = area.id } } +end + slot.put_into("title", encode.html(_"Area '#{name}'":gsub("#{name}", area.name))) ui.container{ diff -r 0849be391140 -r 88ac7798b562 app/main/initiative/_action/create.lua --- a/app/main/initiative/_action/create.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/app/main/initiative/_action/create.lua Thu Apr 15 19:58:25 2010 +0200 @@ -27,6 +27,10 @@ else local area_id = param.get("area_id", atom.integer) area = Area:new_selector():add_where{"id=?",area_id}:single_object_mode():exec() + if not area.active then + slot.put_into("error", "Invalid area.") + return false + end end local policy_id = param.get("policy_id", atom.integer) @@ -36,6 +40,13 @@ return false end +local policy = Policy:by_id(policy_id) + +if not policy.active then + slot.put_into("error", "Invalid policy.") + return false +end + local name = param.get("name") local name = util.trim(name) diff -r 0849be391140 -r 88ac7798b562 app/main/initiative/list_rss.lua --- a/app/main/initiative/list_rss.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/app/main/initiative/list_rss.lua Thu Apr 15 19:58:25 2010 +0200 @@ -1,19 +1,103 @@ +if not config.feature_rss_enabled then + error("feature not enabled") +end + +local area_id = param.get("area_id", atom.integer) +local issue_id = param.get("issue_id", atom.integer) +local order = param.get("order") or "last_created" + +local initiatives_selector = Initiative:new_selector() + +local issue +local area + +if issue_id then + issue = Issue:by_id(issue_id) + initiatives_selector:add_where{ "initiative.issue_id = ?", issue_id } +elseif area_id then + area = Area:by_id(area_id) + initiatives_selector:join("issue", nil, "issue.id = initiative.issue_id") + initiatives_selector:add_where{ "issue.area_id = ?", area_id } +end + + +if order == "last_created" then + initiatives_selector:add_order_by("initiative.created DESC") + initiatives_selector:add_field("initiative.created", "created_or_updated") +elseif order == "last_updated" then + initiatives_selector:add_field("(SELECT MAX(created) FROM draft WHERE initiative_id = initiative.id GROUP BY initiative_id)", "created_or_updated") + initiatives_selector:add_order_by("(SELECT MAX(created) FROM draft WHERE initiative_id = initiative.id GROUP BY initiative_id) DESC") +else + error("Invalid order") +end + +initiatives_selector:add_order_by("id DESC") + +initiatives_selector:limit(25) + +local initiatives = initiatives_selector:exec() + slot.set_layout("atom") - request.force_absolute_baseurl() -local initiatives = Initiative:new_selector() - :add_order_by("id DESC") - :limit(25) - :exec() +ui.tag{ + tag = "author", + content = function() + ui.tag{ + tag = "name", + content = "LiquidFeedback" + } + end +} + +local title + +if issue then + title = "#" .. tostring(issue.id) .. " " .. issue.area.name +elseif area then + title = area.name +else + title = config.app_title +end + +ui.tag{ + tag = "title", + content = title +} + +local subtitle +if order == "last_created" then + subtitle = "Initiatives (last created first)" +elseif order == "last_updated" then + subtitle = "Initiatives (last updated first)" +end + +ui.tag{ + tag = "subtitle", + content = subtitle +} + +ui.tag{ + tag = "id", + content = "urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6" +} + +ui.tag{ + tag = "updated", + content = "2003-12-14T10:20:09Z" +} for i, initiative in ipairs(initiatives) do ui.tag{ tag = "entry", content = function() - ui.tag{ tag = "category", attr = { term = initiative.issue.area.name } } - ui.tag{ tag = "author", content = initiative.current_draft.author.name } - ui.tag{ tag = "title", content = initiative.name } + slot.put("\n") + ui.tag{ tag = "category", attr = { term = encode.html(initiative.issue.area.name) } } + slot.put("\n") + ui.tag{ tag = "author", content = encode.html(initiative.current_draft.author.name) } + slot.put("\n") + ui.tag{ tag = "title", content = encode.html(initiative.shortened_name) } + slot.put("\n") ui.tag{ tag = "link", attr = { href = encode.url{ module = "initiative", @@ -21,9 +105,14 @@ id = initiative.id } } } - ui.tag{ tag = "id", content = "initiative_" .. tostring(initiative_id) } - ui.tag{ tag = "updated", content = tostring(initiative.created) } - ui.tag{ tag = "content", content = initiative.current_draft.draft } + slot.put("\n") + ui.tag{ tag = "id", content = "initiative_" .. tostring(initiative.id) } + slot.put("\n") + ui.tag{ tag = "updated", content = tostring(initiative.created_or_updated) } + slot.put("\n") + ui.tag{ tag = "content", content = encode.html(initiative.current_draft.content or "") } + slot.put("\n") end } -end \ No newline at end of file + slot.put("\n") +end diff -r 0849be391140 -r 88ac7798b562 app/main/initiative/new.lua --- a/app/main/initiative/new.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/app/main/initiative/new.lua Thu Apr 15 19:58:25 2010 +0200 @@ -27,6 +27,7 @@ attr = { class = "vertical" }, content = function() ui.field.text{ label = _"Area", value = area.name } + slot.put("
") if issue_id then ui.field.text{ label = _"Issue", value = issue_id } else @@ -43,7 +44,34 @@ value = (area.default_policy or {}).id } end - ui.field.text{ label = _"Name", name = "name" } + ui.tag{ + tag = "div", + content = function() + ui.tag{ + tag = "label", + attr = { class = "ui_field_label" }, + content = function() slot.put(" ") end, + } + ui.tag{ + content = function() + ui.link{ + text = _"Information about the available policies", + module = "policy", + view = "list" + } + slot.put(" ") + ui.link{ + attr = { target = "_blank" }, + text = _"(new window)", + module = "policy", + view = "list" + } + end + } + end + } + slot.put("
") + ui.field.text{ label = _"Title of initiative", name = "name" } ui.field.text{ label = _"Discussion URL", name = "discussion_url" } ui.field.select{ label = _"Wiki engine", diff -r 0849be391140 -r 88ac7798b562 app/main/issue/_list.lua --- a/app/main/issue/_list.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/app/main/issue/_list.lua Thu Apr 15 19:58:25 2010 +0200 @@ -65,7 +65,7 @@ name = "cancelled", label = _"Cancelled", selector_modifier = function(selector) - selector:add_where("issue.closed NOTNULL AND issue.accepted ISNULL") + selector:add_where("issue.closed NOTNULL AND issue.fully_frozen ISNULL") end }, { diff -r 0849be391140 -r 88ac7798b562 app/main/issue/_show_box.lua --- a/app/main/issue/_show_box.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/app/main/issue/_show_box.lua Thu Apr 15 19:58:25 2010 +0200 @@ -1,10 +1,28 @@ local issue = param.get("issue", "table") slot.select("issue_info", function() - ui.field.text{ - label = _"Policy", - value = issue.policy.name + ui.tag{ + tag = "div", + content = function() + ui.tag{ + tag = "label", + attr = { class = "ui_field_label" }, + content = _"Policy", + } + ui.tag{ + content = function() + ui.link{ + text = issue.policy.name, + module = "policy", + view = "show", + id = issue.policy.id + } + end + } + + end } + ui.field.text{ label = _"State", value = issue.state_name diff -r 0849be391140 -r 88ac7798b562 app/main/issue/_show_head.lua --- a/app/main/issue/_show_head.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/app/main/issue/_show_head.lua Thu Apr 15 19:58:25 2010 +0200 @@ -6,7 +6,10 @@ direct_voter = DirectVoter:by_pk(issue.id, app.session.member.id) end -slot.put_into("html_head", '') +if config.feature_rss_enabled then + util.html_rss_head{ title = _"Initiatives in this issue (last created first)", module = "initiative", view = "list_rss", params = { issue_id = issue.id } } + util.html_rss_head{ title = _"Initiatives in this issue (last updated first)", module = "initiative", view = "list_rss", params = { issue_id = issue.id, order = "last_updated" } } +end slot.select("path", function() end) diff -r 0849be391140 -r 88ac7798b562 app/main/issue/show.rss.lua --- a/app/main/issue/show.rss.lua Sun Apr 04 22:05:11 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -slot.set_layout("rss") - -local function rss_channel(channel) - for key, val in pairs(channel) do - slot.put("<", key, ">", encode.html(val), "") - end -end - -local function rss_item(item) - slot.put("") - for key, val in pairs(item) do - slot.put("<", key, ">", encode.html(val), "") - end - slot.put("") -end - - -local issue = Issue:by_id(param.get_id()) - -rss_channel{ - title = issue.area.name .. " :: Issue #" .. tostring(issue.id), - language = "de", - pubDate = "Tue, 8 Jul 2008 2:43:19" -} - -for i, initiative in ipairs(issue.initiatives) do - rss_item{ - title = initiative.name, - description = initiative.current_draft.content, - link = "http://localhost/lf/initiative/show/" .. tostring(initiative.id) .. ".html", - author = initiative.current_draft.author.name, - guid = "guid", - pubDate = "Tue, 8 Jul 2008 2:43:19" - } -end \ No newline at end of file diff -r 0849be391140 -r 88ac7798b562 app/main/member/_action/update_images.lua --- a/app/main/member/_action/update_images.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/app/main/member/_action/update_images.lua Thu Apr 15 19:58:25 2010 +0200 @@ -31,6 +31,7 @@ member_image.member_id = member_id member_image.image_type = image_type member_image.scaled = false + member_image.content_type = cgi.post_types[image_type] or nil member_image.data = "" member_image:save() end @@ -40,7 +41,7 @@ member_image_scaled.member_id = member_id member_image_scaled.image_type = image_type member_image_scaled.scaled = true - member_image_scaled.content_type = true + member_image_scaled.content_type = config.member_image_content_type member_image_scaled.data = "" member_image_scaled:save() end diff -r 0849be391140 -r 88ac7798b562 app/main/member_image/show.lua --- a/app/main/member_image/show.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/app/main/member_image/show.lua Thu Apr 15 19:58:25 2010 +0200 @@ -11,11 +11,10 @@ exit() end -print('Content-type: ' .. record.content_type .. '\n') +assert(record.content_type, "No content-type set for image.") + +slot.set_layout(nil, record.content_type) if record then - io.stdout:write(record.data) -else + slot.put_into("data", record.data) end - -exit() diff -r 0849be391140 -r 88ac7798b562 app/main/policy/list.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/main/policy/list.lua Thu Apr 15 19:58:25 2010 +0200 @@ -0,0 +1,61 @@ +slot.put_into("title", _"Policies") + +util.help("policy.list", _"Policies") +local policies = Policy:new_selector() + :add_where("active") + :add_order_by("index") + :exec() + +ui.list{ + records = policies, + columns = { + { + label_attr = { width = "500" }, + label = _"Policy", + content = function(policy) + ui.tag{ + tag = "div", + attr = { style = "font-weight: bold" }, + content = function() + slot.put(encode.html(policy.name)) + if not policy.active then + slot.put(" (", _"disabled", ")") + end + end + } + ui.tag{ + tag = "div", + content = policy.description + } + end + }, + { + label_attr = { width = "200" }, + label = _"Phases", + content = function(policy) + ui.field.text{ label = _"New" .. ":", value = "≤ " .. policy.admission_time } + ui.field.text{ label = _"Discussion" .. ":", value = policy.discussion_time } + ui.field.text{ label = _"Frozen" .. ":", value = policy.verification_time } + ui.field.text{ label = _"Voting" .. ":", value = policy.voting_time } + end + }, + { + label_attr = { width = "200" }, + label = _"Quorum", + content = function(policy) + ui.field.text{ + label = _"Issue quorum" .. ":", + value = "≥ " .. tostring(policy.issue_quorum_num) .. "/" .. tostring(policy.issue_quorum_den) + } + ui.field.text{ + label = _"Initiative quorum" .. ":", + value = "≥ " .. tostring(policy.initiative_quorum_num) .. "/" .. tostring(policy.initiative_quorum_den) + } + ui.field.text{ + label = _"Majority" .. ":", + value = (policy.majority_strict and ">" or "≥" ) .. " " .. tostring(policy.majority_num) .. "/" .. tostring(policy.majority_den) + } + end + }, + } +} \ No newline at end of file diff -r 0849be391140 -r 88ac7798b562 app/main/policy/show.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/main/policy/show.lua Thu Apr 15 19:58:25 2010 +0200 @@ -0,0 +1,40 @@ +local policy = Policy:by_id(param.get_id()) + +slot.put_into("title", encode.html(_("Policy '#{name}'", { name = policy.name }))) + +ui.form{ + attr = { class = "vertical" }, + record = policy, + content = function() + ui.field.text{ label = _"Name", value = policy.name } + + ui.field.text{ label = _"New", value = "≤ " .. policy.admission_time } + ui.field.text{ label = _"Discussion", value = policy.discussion_time } + ui.field.text{ label = _"Frozen", value = policy.verification_time } + ui.field.text{ label = _"Voting", value = policy.voting_time } + + ui.field.text{ + label = _"Issue quorum", + value = "≥ " .. tostring(policy.issue_quorum_num) .. "/" .. tostring(policy.issue_quorum_den) + } + ui.field.text{ + label = _"Initiative quorum", + value = "≥ " .. tostring(policy.initiative_quorum_num) .. "/" .. tostring(policy.initiative_quorum_den) + } + ui.field.text{ + label = _"Majority", + value = (policy.majority_strict and ">" or "≥" ) .. " " .. tostring(policy.majority_num) .. "/" .. tostring(policy.majority_den) + } + + ui.container{ + attr = { class = "suggestion_content wiki" }, + content = function() + ui.tag{ + tag = "p", + content = policy.description + } + end + } + + end +} diff -r 0849be391140 -r 88ac7798b562 config/default.lua --- a/config/default.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/config/default.lua Thu Apr 15 19:58:25 2010 +0200 @@ -9,6 +9,7 @@ config.use_terms = "=== Nutzungsbedingungen ===\nAlles ist verboten" +config.member_image_content_type = "image/jpeg" config.member_image_convert_func = { avatar = function(data) return os.pfilter(data, "convert", "jpeg:-", "-thumbnail", "48x48", "jpeg:-") end, photo = function(data) return os.pfilter(data, "convert", "jpeg:-", "-thumbnail", "240x240", "jpeg:-") end @@ -31,6 +32,8 @@ config.api_enabled = false +config.feature_rss_enabled = true + -- OpenID authentication is not fully implemented yet, DO NOT USE BEFORE THIS NOTICE HAS BEEN REMOVED! config.auth_openid_enabled = false config.auth_openid_https_as_default = true diff -r 0849be391140 -r 88ac7798b562 config/development.lua --- a/config/development.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/config/development.lua Thu Apr 15 19:58:25 2010 +0200 @@ -12,9 +12,11 @@ config.issue_discussion_url_func = function(issue) return "http://example.com/issue_" .. tostring(issue.id) end -config.auth_openid_enabled = true +config.auth_openid_enabled = false config.auth_openid_https_as_default = true +config.api_enabled = true + config.auth_openid_identifier_check_func = function(uri) local uri = uri:lower() if uri:find("^https://") then diff -r 0849be391140 -r 88ac7798b562 env/util/autoapi.lua --- a/env/util/autoapi.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/env/util/autoapi.lua Thu Apr 15 19:58:25 2010 +0200 @@ -14,8 +14,10 @@ elseif field.field then value = row[field.name] end - if value then + if value ~= nil then slot.put(encode.html(tostring(value))) + else + slot.put("NULL") end slot.put("\n") end diff -r 0849be391140 -r 88ac7798b562 env/util/html_rss_head.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/util/html_rss_head.lua Thu Apr 15 19:58:25 2010 +0200 @@ -0,0 +1,3 @@ +function util.html_rss_head(args) + slot.put_into("html_head", '') +end diff -r 0849be391140 -r 88ac7798b562 fastpath/getpic.c --- a/fastpath/getpic.c Sun Apr 04 22:05:11 2010 +0200 +++ b/fastpath/getpic.c Thu Apr 15 19:58:25 2010 +0200 @@ -20,14 +20,14 @@ char *args_string; char *member_id; char *image_type; - char *sql_member_image_params[2]; + const char *sql_member_image_params[2]; char *cookies; regex_t session_ident_regex; ssize_t start, length; regmatch_t session_ident_regmatch[3]; char *session_ident; - char *sql_session_params[1]; + const char *sql_session_params[1]; PGconn *conn; PGresult *dbr; @@ -48,7 +48,7 @@ // shouldn't happen abort(); } - if (regexec(&session_ident_regex, cookies, 2, session_ident_regmatch, 0) != 0) { + if (regexec(&session_ident_regex, cookies, 3, session_ident_regmatch, 0) != 0) { fputs("Status: 403 Access Denied\n\n", stdout); return 0; } @@ -125,10 +125,7 @@ PQfinish(conn); return 1; } - fputs("Content-Type: ", stdout); - fprintf(stdout, "Content-Length: %i\n", PQgetlength(dbr, 0, 1)); - fwrite(PQgetvalue(dbr, 0, 0), PQgetlength(dbr, 0, 0), 1, stdout); - fputs("\n\n", stdout); + fprintf(stdout, "Content-Type: %s\n\n", PQgetvalue(dbr, 0, 0)); fwrite(PQgetvalue(dbr, 0, 1), PQgetlength(dbr, 0, 1), 1, stdout); } PQfinish(conn); diff -r 0849be391140 -r 88ac7798b562 locale/help/area.show.de.txt --- a/locale/help/area.show.de.txt Sun Apr 04 22:05:11 2010 +0200 +++ b/locale/help/area.show.de.txt Thu Apr 15 19:58:25 2010 +0200 @@ -1,7 +1,7 @@ =Thema, Interesse= Auf dieser Seite werden alle Initiativen zu diesem Thema aufgelistet. Wenn du ,,Interesse am Thema'' anmeldest, wirst du für dieses Thema den Mitgliedern des übergeordneten Themenbereichs gleichgestellt und erhöhst die Bemessungsgrundlage der von Initiativen zu erreichenden Unterstützerquoren. Sobald du eine Initiative dieses Themas unterstützt, wird dein Interesse auch automatisch angemeldet. Sofern du allen Initiativen die Unterstützung entziehst, bleibt dein Interesse dennoch bestehen bis du es abmeldest. =Delegation, Auto-Ablehnung= -Eine Delegation zu diesem Thema geht einer eventuell vorhandenen globalen Delegation und/oder Delegation für den übergeordneten Themenbereich vor. Eine eventuelle Weisung zur Auto-Ablehung gilt nur für den Fall, dass du nicht selbst an der Endabstimmung teilnimmst und es keine tatsächlich genutzte Delegation gibt. Bei angemeldetem Interesse werden ausgehende Delegationen während der Diskussionsphase ausgesetzt, gelten aber in der Endabstimmung. +Eine Delegation zu diesem Thema geht einer eventuell vorhandenen globalen Delegation und/oder Delegation für den übergeordneten Themenbereich vor. Eine eventuelle Weisung zur Auto-Ablehnung gilt nur für den Fall, dass du nicht selbst an der Endabstimmung teilnimmst und es keine tatsächlich genutzte Delegation gibt. Bei angemeldetem Interesse werden ausgehende Delegationen während der Diskussionsphase ausgesetzt, gelten aber in der Endabstimmung. =Diskussionsphase= Während der Diskussionsphase (Zustände ,,Neu'' und ,,Diskussion'') solltest du **alle** Initiativen, die du grundsätzlich (oder unter bestimmten Bedingungen) für zustimmungsfähig hältst, unterstützen und Anregungen zur Verbesserung geben (Näheres dazu findest du auf der Initiativenseite). Hierdurch gibst du den Initiatoren die Chance, den Entwurf zu verbessern. Während dieser Phase hast du auch die Möglichkeit, eine eigene (konkurrierende) Initiative zu diesem Thema zu starten und um Unterstützung zu ringen. =Endabstimmung= diff -r 0849be391140 -r 88ac7798b562 locale/help/issue.show.de.txt --- a/locale/help/issue.show.de.txt Sun Apr 04 22:05:11 2010 +0200 +++ b/locale/help/issue.show.de.txt Thu Apr 15 19:58:25 2010 +0200 @@ -1,7 +1,7 @@ =Thema, Interesse= Auf dieser Seite werden alle Initiativen zu diesem Thema aufgelistet. Wenn du ,,Interesse am Thema'' anmeldest, wirst du für dieses Thema den Mitgliedern des übergeordneten Themenbereichs gleichgestellt. Sobald du eine Initiative dieses Themas unterstützt, wird dein Interesse auch automatisch angemeldet. Sofern du allen Initiativen die Unterstützung entziehst, bleibt dein Interesse dennoch bestehen bis du es abmeldest. =Delegation, Auto-Ablehnung= -Eine Delegation zu diesem Thema geht einer eventuell vorhandenen globalen Delegation und/oder Delegation für den übergeordneten Themenbereich vor. Eine eventuelle Weisung zur Auto-Ablehung gilt nur für den Fall, dass du nicht selbst an der Endabstimmung teilnimmst und es keine tatsächlich genutzte Delegation gibt. Bei angemeldetem Interesse werden ausgehende Delegationen während der Diskussionsphase ausgesetzt, gelten aber in der Endabstimmung. +Eine Delegation zu diesem Thema geht einer eventuell vorhandenen globalen Delegation und/oder Delegation für den übergeordneten Themenbereich vor. Eine eventuelle Weisung zur Auto-Ablehnung gilt nur für den Fall, dass du nicht selbst an der Endabstimmung teilnimmst und es keine tatsächlich genutzte Delegation gibt. Bei angemeldetem Interesse werden ausgehende Delegationen während der Diskussionsphase ausgesetzt, gelten aber in der Endabstimmung. =Diskussionsphase= Während der Diskussionsphase (Zustände ,,Neu'' und ,,Diskussion'') solltest du **alle** Initiativen, die du grundsätzlich (oder unter bestimmten Bedingungen) für zustimmungsfähig hältst, unterstützen und Anregungen zur Verbesserung geben (Näheres dazu findest du auf der Initiativenseite). Hierdurch gibst du den Initiatoren die Chance, den Entwurf zu verbessern. Während dieser Phase hast du auch die Möglichkeit, eine eigene (konkurrierende) Initiative zu diesem Thema zu starten und um Unterstützung zu ringen. Deine Unterstützung für eine Initiative während der Diskussionsphase bedeutet keine Festlegung auf dein Verhalten in der Endabstimmung. =Endabstimmung= diff -r 0849be391140 -r 88ac7798b562 locale/translations.de.lua --- a/locale/translations.de.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/locale/translations.de.lua Thu Apr 15 19:58:25 2010 +0200 @@ -11,9 +11,9 @@ ["(new window)"] = "(neues Fenster)"; ["+ #{weight}"] = "+ #{weight}"; ["A-Z"] = "A-Z"; -["API key"] = false; -["API key has been deleted"] = false; -["API key has been updated"] = false; +["API key"] = "API-Schlüssel"; +["API key has been deleted"] = "API-Schlüssel wurde gelöscht"; +["API key has been updated"] = "API-Schlüssel wurde aktualisiert"; ["About"] = "About"; ["About / Impressum"] = false; ["About LiquidFeedback"] = "Über LiquidFeedback"; @@ -74,7 +74,7 @@ ["Cancel refuse of invitation"] = "Ablehnung der Einladung aufheben"; ["Cancel registration"] = "Registration abbrechen"; ["Cancelled"] = "Abgebrochen"; -["Change API key"] = false; +["Change API key"] = "API-Schlüssel ändern"; ["Change area delegation"] = "Delegation für Themenbereich ändern"; ["Change display settings"] = "Anzeige-Einstellungen ändern"; ["Change filters and order"] = "Filter und Sortierung ändern"; @@ -107,11 +107,11 @@ ["Created at"] = "Erzeugt am/um"; ["Current draft"] = "Aktueller Entwurf"; ["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:"; -["Currently no API key is set."] = false; +["Currently no API key is set."] = "Zur Zeit ist kein API-Schlüssel festgelegt."; ["Date"] = "Datum"; ["Degree"] = "Grad"; ["Delegations"] = "Delegationen"; -["Delete API key"] = false; +["Delete API key"] = "API-Schlüssel löschen"; ["Delete filter"] = "Filter löschen"; ["Description"] = "Beschreibung"; ["Details"] = "Details"; @@ -150,7 +150,7 @@ ["Email address too short!"] = "E-Mail-Adresse ist zu kurz!"; ["Email confirmation request"] = "Bestätigung Deiner E-Mail-Adresse"; ["Empty help text: #{id}.#{lang}.txt"] = "Leerer Hilfe-Text: #{id}.#{lang}.txt"; -["Error while resolving openid. Internal message: '#{errmsg}'"] = false; +["Error while resolving openid. Internal message: '#{errmsg}'"] = "Fehler beim Auflösen der OpenID. Interne Fehlermeldung: '#{errmsg}'"; ["Error while updating member, database reported:

(#{errormessage})"] = "Fehler beim aktualisieren des Mitglieds, die Datenbank berichtet folgenden Fehler:

(#{errormessage})"; ["External memberships"] = "Externe Mitgliedschaften"; ["External posts"] = "Externe Ämter"; @@ -160,8 +160,8 @@ ["Friday"] = "Freitag"; ["Frozen"] = "Eingefroren"; ["Fully frozen at"] = "Ganz eingefroren am/um"; -["Generate / change API key"] = false; -["Generate API key"] = false; +["Generate / change API key"] = "API-Schlüssel erzeugen/ändern"; +["Generate API key"] = "API-Schlüssel erzeugen"; ["Global delegation"] = "Globale Delegation"; ["Global delegation active"] = "Globale Delegation aktiv"; ["Go up"] = "Nach oben"; @@ -179,6 +179,7 @@ ["Images"] = "Bilder"; ["In discussion"] = "In Diskussion"; ["Incoming delegations"] = "Eingehende Delegationen"; +["Information about the available policies"] = "Informationen zu den verfügbaren Regelwerken"; ["Initiated"] = "Initiert"; ["Initiated initiatives"] = "Initierte Initiativen"; ["Initiative events"] = "Initiativen-Ereignisse"; @@ -189,6 +190,10 @@ ["Initiative successfully updated"] = "Initiative erfolgreich aktualisiert"; ["Initiative: '#{name}'"] = "Initiative: '#{name}'"; ["Initiatives"] = "Initiativen"; +["Initiatives in this area (last created first)"] = "Initiativen in diesem Themenbereich (zuletzt angelegte zuerst)"; +["Initiatives in this area (last updated first)"] = "Initiativen in diesem Themenbereich (zuletzt aktualisierte zuerst)"; +["Initiatives in this issue (last created first)"] = "Initiativen in diesem Thema (zuletzt angelegte zuerst)"; +["Initiatives in this issue (last updated first)"] = "Initiativen in diesem Thema (zuletzt aktualisierte zuerst)"; ["Initiatives that invited you to become initiator:"] = "Initiative, die Dich eingeladen haben, Initiator zu werden:"; ["Initiator"] = "Initiator"; ["Initiators"] = "Initiatoren"; @@ -228,6 +233,7 @@ ["Login successful!"] = "Anmeldung erfolgreich"; ["Logout"] = "Abmelden"; ["Logout successful"] = "Abmeldung erfolgreich"; +["Majority"] = "Mehrheit"; ["Manage filter"] = "Filter verwalten"; ["Manage timeline filters"] = "Zeitachsen-Filter verwalten"; ["Mark suggestion as implemented and express dissatisfaction"] = "Anregung als umgesetzt markieren und Unzufriedenheit ausdrücken"; @@ -300,8 +306,8 @@ ["Old password"] = "Altes Kennwort"; ["Old password is wrong"] = "Das alte Kennwort ist falsch"; ["Oldest"] = "Älteste"; -["On that page please enter the confirmation code:\n\n"] = "Auf dieser Seite gebe bitte folgenden Bestätigungscode ein:\n\n"; -["On that page please enter the reset code:\n\n"] = "Auf dieser Seite gebe bitte den folgenden Rücksetzcode ein:\n\n"; +["On that page please enter the confirmation code:\n\n"] = "Auf dieser Seite gib bitte folgenden Bestätigungscode ein:\n\n"; +["On that page please enter the reset code:\n\n"] = "Auf dieser Seite gib bitte den folgenden Rücksetzcode ein:\n\n"; ["One issue"] = "Ein Thema"; ["One issue you are interested in"] = "Ein Thema, das Dich interessiert"; ["One step back"] = "Ein Schritt zurück"; @@ -318,12 +324,13 @@ ["Password reset request"] = "Kennwort-Rücksetzung anfordern"; ["Passwords don't match!"] = "Kennwörter stimmen nicht überein!"; ["Passwords must consist of at least 8 characters!"] = "Das Kennwort muß zumindest 8 Zeichen lang sein!"; +["Phases"] = "Phasen"; ["Phone"] = "Telefon"; ["Photo"] = "Foto"; ["Please choose a login name. This name will not be shown to others and is used only by you to login into the system. The login name is case sensitive."] = "Bitte wähle einen Anmeldenamen. Dieser wird anderen nicht gezeigt und nur von Dir zum Anmelden verwendet. Groß- und Kleinschreibung wird berücksichtigt."; ["Please choose a member"] = "Bitte wähle ein Mitglied"; ["Please choose a name, i.e. your real name or your nick name. This name will be shown to others to identify you."] = "Wähle einen Namen, z. B. Deinen Real- oder Nicknamen. Dieser wird anderen angezeigt um Dich zu identifizieren."; -["Please choose a password and enter it twice. The password is case sensitive."] = "Bitte wähle ein Kennwort und gebe es zweimal ein. Groß- und Kleinschreibung wird berücksichtigt."; +["Please choose a password and enter it twice. The password is case sensitive."] = "Bitte wähle ein Kennwort und gib es zweimal ein. Groß- und Kleinschreibung wird berücksichtigt."; ["Please choose a policy"] = "Bitte wähle ein Regelwerk"; ["Please choose two different versions of the draft to compare"] = "Bitte wähle zwei verschiedene Versionen des Drafts, um sie zu vergleichen."; ["Please choose two versions of the draft to compare"] = "Bitte wähle zwei Versionen des Drafts, um sie zu vergleichen."; @@ -333,7 +340,9 @@ ["Please enter your email address. This address will be used for automatic notifications (if you request them) and in case you've lost your password. This address will not be published. After registration you will receive an email with a confirmation link."] = "Bitte gib Deine E-Mail-Adresse ein. Diese Adresse wird für automatische Benachrichtigungen (wenn Du diese anforderst) sowie zum Zurücksetzen des Kennworts verwendet. Diese Adresse wird nicht veröffentlicht. Nach Abschluß der Registration wirst Du eine E-Mail mit einem Link zum Bestätigen der Adresse erhalten."; ["Please enter your login name. You will receive an email with a link to reset your password."] = "Bitte gib Deinen Anmeldenamen ein. Du wirst eine E-Mail mit einem Link zum Zurücksetzen des Kennworts erhalten."; ["Please enter your new password twice."] = "Bitte gib Dein neues Kennwort zweimal ein:"; +["Policies"] = "Regelwerke"; ["Policy"] = "Regelwerk"; +["Policy '#{name}'"] = "Regelwerk '#{name}'"; ["Population"] = "Grundgesamtheit"; ["Posts"] = "Ämter"; ["Potential support"] = "Potentielle Unterstützung"; @@ -345,6 +354,7 @@ ["Profile"] = "Profil"; ["Publish"] = "Veröffentlichen"; ["Published"] = "veröffentlicht"; +["Quorum"] = false; ["Rank"] = "Rang"; ["Real name"] = "Realname"; ["Refresh support to current draft"] = "Unterstützung auf aktuellen Entwurf aktualisieren"; @@ -381,7 +391,7 @@ ["Search issues"] = "Suche Themen"; ["Search members"] = "Suche Mitglieder"; ["Search results for: '#{search}'"] = "Suchergebnisse für: '#{search}'"; -["Select language \"#{langcode}\""] = false; +["Select language \"#{langcode}\""] = "Sprache \"#{langcode}\" wählen"; ["Set URL"] = "URL setzen"; ["Set area delegation"] = "Delegation für Themenbereich festlegen"; ["Set autoreject"] = "Auto-Ablehnen anschalten"; @@ -408,7 +418,7 @@ ["Some JavaScript based functions (voting in particular) will not work.\nFor this beta, please use a current version of Firefox, Safari, Opera(?), Konqueror or another (more) standard compliant browser.\nAlternative access without JavaScript will be available soon."] = "Einige auf JavaScript basierende Funktionen (insbesondere der Abstimmung) sind nicht benutzbar.\nFür diese Beta verwende bitte eine aktuelle Version von Firefox, Safari, Opera(?), Konqueror oder einen anderen (mehr) den Standards entsprechenden Browser.\nEin alternativer Zugriff ohne JavaScript wird bald zur Verfügung stehen."; ["Sorry, but there is not confirmed email address for your account. Please contact the administrator or support."] = "Sorry, aber für diesen Account ist keine bestätigte E-Mail-Adresse hinterlegt. Bitte wende Dich an den Administrator oder den Support."; ["Sorry, but you are currently not invited"] = "Sorry, aber Du bist zur Zeit nicht eingeladen"; -["Sorry, it was not possible to verify your OpenID."] = false; +["Sorry, it was not possible to verify your OpenID."] = "Sorry, es war nicht möglich deine OpenID zu verifizieren."; ["Sorry, you have reached your personal flood limit. Please be slower..."] = "Sorry, Du hast Dein persönliches Flood-Limit erreicht. Bitte sei langsamer..."; ["Sorry, your contingent for creating initiatives has been used up. Please try again later."] = "Sorry, Dein Antragskontingent ist zur Zeit ausgeschöpft. Bitte versuche es später erneut!"; ["State"] = "Zustand"; @@ -436,14 +446,14 @@ ["Tabs"] = "Registerkarten"; ["Terms accepted"] = "Bedingungen akzeptiert"; ["Terms of use"] = "Nutzungsbedingungen"; -["The API key has been changed too fast."] = false; +["The API key has been changed too fast."] = "Der API-Schlüssel wurde zu schnell geändert."; ["The code you've entered is invalid"] = "Der Code, den Du eingeben hast, ist nicht gültig!"; ["The draft of this initiative has been updated!"] = "Der Entwurfstext der Initiative wurde aktualisiert!"; ["The drafts do not differ"] = "Die Entwürfe unterscheiden sich nicht"; ["The initiators suggest to support the following initiative:"] = "Die Initiatoren empfehlen folgende Initiative zu unterstützen:"; ["There are no more alternative initiatives currently."] = "Es gibt zur Zeit keine weiteren alternative Initiative."; ["There were no more alternative initiatives."] = "Es gab keine weiteren alternativen Initiativen."; -["This identifier is not allowed for this instance."] = false; +["This identifier is not allowed for this instance."] = "Dieser Identifier ist für diese Instanz nicht zugelassen."; ["This initiative"] = "Diese Initiative"; ["This initiative compared to alternative initiatives"] = "Diese Initiative im Vergleich zu alternativen Initiativen"; ["This initiative has been revoked at #{revoked}"] = "Diese Initiative wurde am/um #{revoked} zurückgezogen"; @@ -474,6 +484,7 @@ ["Timeline"] = "Zeitachse"; ["Title"] = "Titel"; ["Title (80 chars max)"] = "Titel (max. 80 Zeichen)"; +["Title of initiative"] = "Titel der Initiative"; ["Traditional wiki syntax"] = "Traditionelle Wiki-Syntax"; ["Trustee"] = "Bevollmächtigter"; ["Tuesday"] = "Dienstag"; @@ -520,10 +531,10 @@ ["You have saved this member as contact."] = "Du hast das Mitglied als Kontakt gespeichert."; ["You have to accept the terms of use to complete registration."] = "Du musst die Nutzungsbedingungen akzeptieren um die Registration abzuschliessen."; ["You have to mark 'Are you sure' to revoke!"] = "Zum Zurückziehen musst Du 'Sicher?' auswählen"; -["You need to be logged in, to use all features of this system."] = false; +["You need to be logged in, to use all features of this system."] = "Du musst eingeloggt sein, um alle Funktionen dieses Systems nutzen zu können."; ["You want to vote later"] = "Du willst später abstimmen"; ["You've successfully registered and you can login now with your login and password!"] = "Du hast Dich erfolgreich registriert und kannst Dich jetzt mit Deinen Benutzernamen und Kennwort anmelden!"; -["Your API key:"] = false; +["Your API key:"] = "Dein API-Schlüssel:"; ["Your are interested"] = "Du bist interessiert"; ["Your are potential supporter"] = "Du bist potentieller Unterstützer"; ["Your are supporter"] = "Du bist Unterstützer"; @@ -547,11 +558,12 @@ ["Your vote has been discarded. Delegation rules apply if set."] = "Deine Abstimmung wurde zurückgezogen. Delegationsregeln gelten sofern gesetzt."; ["Your web browser is not fully supported yet."] = "Dein Web-Browser wird noch nicht vollständig unterstützt."; ["Z-A"] = "Z-A"; -["[Registered members only]"] = false; -["[not displayed public]"] = false; +["[Registered members only]"] = "[nur für Registrierte]"; +["[not displayed public]"] = "[nicht öffentlich]"; ["and #{count} more initiatives"] = "und #{count} weitere Initiativen"; ["continuing"] = "andauernd"; ["delete

"] = "löschen

"; +["disabled"] = "ausgeschaltet"; ["email"] = "E-Mail"; ["last 24 hours"] = "letzte 24 Stunden"; ["login name"] = "Anmeldename"; diff -r 0849be391140 -r 88ac7798b562 locale/translations.en.lua --- a/locale/translations.en.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/locale/translations.en.lua Thu Apr 15 19:58:25 2010 +0200 @@ -179,6 +179,7 @@ ["Images"] = false; ["In discussion"] = false; ["Incoming delegations"] = false; +["Information about the available policies"] = false; ["Initiated"] = false; ["Initiated initiatives"] = false; ["Initiative events"] = false; @@ -189,6 +190,10 @@ ["Initiative successfully updated"] = false; ["Initiative: '#{name}'"] = false; ["Initiatives"] = false; +["Initiatives in this area (last created first)"] = false; +["Initiatives in this area (last updated first)"] = false; +["Initiatives in this issue (last created first)"] = false; +["Initiatives in this issue (last updated first)"] = false; ["Initiatives that invited you to become initiator:"] = false; ["Initiator"] = false; ["Initiators"] = false; @@ -228,6 +233,7 @@ ["Login successful!"] = false; ["Logout"] = false; ["Logout successful"] = false; +["Majority"] = false; ["Manage filter"] = false; ["Manage timeline filters"] = false; ["Mark suggestion as implemented and express dissatisfaction"] = false; @@ -318,6 +324,7 @@ ["Password reset request"] = false; ["Passwords don't match!"] = false; ["Passwords must consist of at least 8 characters!"] = false; +["Phases"] = false; ["Phone"] = false; ["Photo"] = false; ["Please choose a login name. This name will not be shown to others and is used only by you to login into the system. The login name is case sensitive."] = false; @@ -333,7 +340,9 @@ ["Please enter your email address. This address will be used for automatic notifications (if you request them) and in case you've lost your password. This address will not be published. After registration you will receive an email with a confirmation link."] = false; ["Please enter your login name. You will receive an email with a link to reset your password."] = false; ["Please enter your new password twice."] = false; +["Policies"] = false; ["Policy"] = false; +["Policy '#{name}'"] = false; ["Population"] = false; ["Posts"] = false; ["Potential support"] = false; @@ -345,6 +354,7 @@ ["Profile"] = false; ["Publish"] = false; ["Published"] = false; +["Quorum"] = false; ["Rank"] = false; ["Real name"] = false; ["Refresh support to current draft"] = false; @@ -474,6 +484,7 @@ ["Timeline"] = false; ["Title"] = false; ["Title (80 chars max)"] = false; +["Title of initiative"] = false; ["Traditional wiki syntax"] = false; ["Trustee"] = false; ["Tuesday"] = false; @@ -552,6 +563,7 @@ ["and #{count} more initiatives"] = false; ["continuing"] = false; ["delete

"] = false; +["disabled"] = false; ["email"] = false; ["last 24 hours"] = false; ["login name"] = false; diff -r 0849be391140 -r 88ac7798b562 locale/translations.eo.lua --- a/locale/translations.eo.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/locale/translations.eo.lua Thu Apr 15 19:58:25 2010 +0200 @@ -179,6 +179,7 @@ ["Images"] = "Bildoj"; ["In discussion"] = "En diskuton"; ["Incoming delegations"] = "Alvenantaj delegacioj"; +["Information about the available policies"] = false; ["Initiated"] = "Lanĉita"; ["Initiated initiatives"] = "Lanĉitaj iniciatoj"; ["Initiative events"] = "Iniciato-eventoj"; @@ -189,6 +190,10 @@ ["Initiative successfully updated"] = "Iniciato sukcese ĝisdatigita"; ["Initiative: '#{name}'"] = "Iniciato: '#{name}'"; ["Initiatives"] = "Iniciatoj"; +["Initiatives in this area (last created first)"] = false; +["Initiatives in this area (last updated first)"] = false; +["Initiatives in this issue (last created first)"] = false; +["Initiatives in this issue (last updated first)"] = false; ["Initiatives that invited you to become initiator:"] = "Iniciatoj, kiuj vin invitis esti iniciatinto:"; ["Initiator"] = "Iniciatinto"; ["Initiators"] = "Iniciatintoj"; @@ -228,6 +233,7 @@ ["Login successful!"] = "Saluto sukcesa!"; ["Logout"] = "Adiaŭi"; ["Logout successful"] = "Adiaŭo sukcesa"; +["Majority"] = false; ["Manage filter"] = "Administri filtrilojn"; ["Manage timeline filters"] = "Administri tempolinio-filtrilojn"; ["Mark suggestion as implemented and express dissatisfaction"] = "Marki sugeston kiel realigitan kaj esprimi malkontentecon"; @@ -318,6 +324,7 @@ ["Password reset request"] = "Demando de rimetopasvorton"; ["Passwords don't match!"] = "La pasvortoj ne estas samaj!"; ["Passwords must consist of at least 8 characters!"] = "La pasvorto devas havi almenaŭ 8 literojn!"; +["Phases"] = false; ["Phone"] = "Telefono"; ["Photo"] = "Foto"; ["Please choose a login name. This name will not be shown to others and is used only by you to login into the system. The login name is case sensitive."] = "Bonvolu elekti salutonomon! Tiu nomo ne estas montrita al aliaj kaj nur vi uzas tiun nomon por la saluto. La uskleco (granda/malgranda) gravas"; @@ -333,7 +340,9 @@ ["Please enter your email address. This address will be used for automatic notifications (if you request them) and in case you've lost your password. This address will not be published. After registration you will receive an email with a confirmation link."] = "Bonvolu enigi vian retadreson. Tiu adreso estas uzita por aŭtomataj sciigoj (se vi petas tiajn) kaj por remeti la pasvorton. Tiu adreso ne estos publikigita. Post la fino de la registrado, vi ricevos retpoŝton kun ligilo al la konfirmo de la adreso."; ["Please enter your login name. You will receive an email with a link to reset your password."] = "Bonvolu enigi vian salutnomon. Vi ricevos retpoŝton kun ligilo al la remeto de la pasvorto."; ["Please enter your new password twice."] = "Bonvolu enigi dufoje vian novan pasvorton:"; +["Policies"] = false; ["Policy"] = "Regularo"; +["Policy '#{name}'"] = false; ["Population"] = "Loĝantaro"; ["Posts"] = "Postenoj"; ["Potential support"] = "Eventuala subteno"; @@ -345,6 +354,7 @@ ["Profile"] = "Profilo"; ["Publish"] = "Publikigi"; ["Published"] = "Publikigita"; +["Quorum"] = false; ["Rank"] = "Rango"; ["Real name"] = "Vera nomo"; ["Refresh support to current draft"] = "Refreŝigi subtenon por la aktuala skizo"; @@ -474,6 +484,7 @@ ["Timeline"] = "Tempolinio"; ["Title"] = "Titolo"; ["Title (80 chars max)"] = "Titolo (maksimume 80 literoj)"; +["Title of initiative"] = false; ["Traditional wiki syntax"] = "Tradicia Viki-sintakso"; ["Trustee"] = "Fidulo mastrumanta"; ["Tuesday"] = "Mardo"; @@ -552,6 +563,7 @@ ["and #{count} more initiatives"] = "kaj #{count} pliaj iniciatoj"; ["continuing"] = "kontinue"; ["delete

"] = "forviŝi

"; +["disabled"] = false; ["email"] = "Retpoŝto"; ["last 24 hours"] = "lastaj 24 horoj"; ["login name"] = "Salutnomo"; diff -r 0849be391140 -r 88ac7798b562 locale/translations.fr.lua --- a/locale/translations.fr.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/locale/translations.fr.lua Thu Apr 15 19:58:25 2010 +0200 @@ -179,6 +179,7 @@ ["Images"] = false; ["In discussion"] = false; ["Incoming delegations"] = false; +["Information about the available policies"] = false; ["Initiated"] = false; ["Initiated initiatives"] = false; ["Initiative events"] = false; @@ -189,6 +190,10 @@ ["Initiative successfully updated"] = false; ["Initiative: '#{name}'"] = false; ["Initiatives"] = false; +["Initiatives in this area (last created first)"] = false; +["Initiatives in this area (last updated first)"] = false; +["Initiatives in this issue (last created first)"] = false; +["Initiatives in this issue (last updated first)"] = false; ["Initiatives that invited you to become initiator:"] = false; ["Initiator"] = false; ["Initiators"] = false; @@ -228,6 +233,7 @@ ["Login successful!"] = false; ["Logout"] = false; ["Logout successful"] = false; +["Majority"] = false; ["Manage filter"] = false; ["Manage timeline filters"] = false; ["Mark suggestion as implemented and express dissatisfaction"] = false; @@ -318,6 +324,7 @@ ["Password reset request"] = false; ["Passwords don't match!"] = false; ["Passwords must consist of at least 8 characters!"] = false; +["Phases"] = false; ["Phone"] = false; ["Photo"] = false; ["Please choose a login name. This name will not be shown to others and is used only by you to login into the system. The login name is case sensitive."] = false; @@ -333,7 +340,9 @@ ["Please enter your email address. This address will be used for automatic notifications (if you request them) and in case you've lost your password. This address will not be published. After registration you will receive an email with a confirmation link."] = false; ["Please enter your login name. You will receive an email with a link to reset your password."] = false; ["Please enter your new password twice."] = false; +["Policies"] = false; ["Policy"] = false; +["Policy '#{name}'"] = false; ["Population"] = false; ["Posts"] = false; ["Potential support"] = false; @@ -345,6 +354,7 @@ ["Profile"] = false; ["Publish"] = false; ["Published"] = false; +["Quorum"] = false; ["Rank"] = false; ["Real name"] = false; ["Refresh support to current draft"] = false; @@ -474,6 +484,7 @@ ["Timeline"] = false; ["Title"] = false; ["Title (80 chars max)"] = false; +["Title of initiative"] = false; ["Traditional wiki syntax"] = false; ["Trustee"] = false; ["Tuesday"] = false; @@ -552,6 +563,7 @@ ["and #{count} more initiatives"] = false; ["continuing"] = false; ["delete

"] = false; +["disabled"] = false; ["email"] = false; ["last 24 hours"] = false; ["login name"] = false; diff -r 0849be391140 -r 88ac7798b562 model/initiative.lua --- a/model/initiative.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/model/initiative.lua Thu Apr 15 19:58:25 2010 +0200 @@ -157,3 +157,18 @@ end return name end + +function Initiative.object_get:initiator_names() + local members = Member:new_selector() + :join("initiator", nil, "initiator.member_id = member.id") + :add_where{ "initiator.initiative_id = ?", self.id } + :add_where{ "initiator.accepted" } + :exec() + + local member_names = {} + for i, member in ipairs(members) do + member_names[#member_names+1] = member.name + end + return member_names +end + diff -r 0849be391140 -r 88ac7798b562 model/issue.lua --- a/model/issue.lua Sun Apr 04 22:05:11 2010 +0200 +++ b/model/issue.lua Thu Apr 15 19:58:25 2010 +0200 @@ -163,23 +163,22 @@ end function Issue.object_get:state() - if self.accepted then - if self.closed then + if self.closed then + if self.fully_frozen then return "finished" - elseif self.fully_frozen then - return "voting" - elseif self.half_frozen then - return "frozen" else - return "accepted" + return "cancelled" end + elseif self.fully_frozen then + return "voting" + elseif self.half_frozen then + return "frozen" + elseif self.accepted then + return "accepted" else - if self.closed then - return "cancelled" - else - return "new" - end + return "new" end + end function Issue.object_get:state_name()