# HG changeset patch
# User bsw
# Date 1331395069 -3600
# Node ID 699b9fa7bc364048687ad36dc56a1b6d7a2c4a7e
# Parent 336476245f3f4b847b71634e4976bd1b98184135
Integrated new event system, splitted issues in open/closed, changed navigation
diff -r 336476245f3f -r 699b9fa7bc36 app/main/_filter/20_session.lua
--- a/app/main/_filter/20_session.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/app/main/_filter/20_session.lua Sat Mar 10 16:57:49 2012 +0100
@@ -13,4 +13,12 @@
locale.set{ lang = app.session.lang or config.default_lang or "en" }
+if locale.get("lang") == "de" then
+ locale.set{
+ date_format = 'DD.MM.YYYY',
+ time_format = 'HH:MM Uhr',
+ decimal_point = ','
+ }
+end
+
execute.inner()
diff -r 336476245f3f -r 699b9fa7bc36 app/main/_filter_view/30_navigation.lua
--- a/app/main/_filter_view/30_navigation.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/app/main/_filter_view/30_navigation.lua Sat Mar 10 16:57:49 2012 +0100
@@ -4,10 +4,26 @@
if config.public_access or app.session.member_id then
ui.link{
- text = _"Home",
+ attr = { class = "logolf" },
+ content = _"Home",
module = 'index',
view = 'index'
}
+ ui.link{
+ content = _"Units",
+ module = 'unit',
+ view = 'list'
+ }
+ ui.link{
+ content = _"Members",
+ module = 'member',
+ view = 'list'
+ }
+ ui.link{
+ content = _"Contacts",
+ module = 'contact',
+ view = 'list'
+ }
else
ui.link{
text = _"Login",
@@ -16,24 +32,6 @@
}
end
- if app.session.member then
-
- if not config.single_unit_id then
- ui.link{
- text = _"Units",
- module = 'unit',
- view = 'list'
- }
- else
- ui.link{
- text = _"Areas",
- module = 'unit',
- view = 'show',
- id = config.single_unit_id
- }
- end
- end
-
if config.public_access and app.session.member == nil then
ui.link{
text = _"Login",
@@ -65,65 +63,68 @@
}
else
- ui.link{
- text = _"Timeline",
- module = "timeline",
- view = "index"
- }
-
- ui.link{
- text = _"Members",
- module = 'member',
- view = 'list',
- params = { member_list = "newest" }
- }
-
- ui.link{
- text = _"Contacts",
- module = 'contact',
- view = 'list'
- }
+ ui.container{ attr = { class = "member_info" }, content = function()
+ ui.link{
+ content = function()
+ execute.view{
+ module = "member_image",
+ view = "_show",
+ params = {
+ member = app.session.member,
+ image_type = "avatar",
+ show_dummy = true,
+ class = "micro_avatar",
+ }
+ }
+ ui.tag{ content = app.session.member.name }
+ end,
+ module = "member",
+ view = "show",
+ id = app.session.member_id
+ }
- ui.link{
- text = (_"Settings"),
- module = "member",
- view = "settings"
- }
-
- ui.link{
- text = _"About",
- module = 'index',
- view = 'about'
- }
+ ui.link{
+ text = _"Settings",
+ module = "member",
+ view = "settings"
+ }
- if app.session.member_id then
- ui.link{
- -- image = { static = "icons/16/stop.png" },
- text = _"Logout",
- module = 'index',
- action = 'logout',
- routing = {
- default = {
- mode = "redirect",
- module = "index",
- view = "index"
+ if app.session.member_id then
+ ui.link{
+ -- image = { static = "icons/16/stop.png" },
+ text = _"Logout",
+ module = 'index',
+ action = 'logout',
+ routing = {
+ default = {
+ mode = "redirect",
+ module = "index",
+ view = "index"
+ }
}
}
- }
- end
-
- if app.session.member.admin then
-
- slot.put(" ")
-
+ end
+
ui.link{
- attr = { class = { "admin_only" } },
- text = _"Admin",
- module = 'admin',
- view = 'index'
+ text = _"About",
+ module = 'index',
+ view = 'about'
}
- end
+ if app.session.member.admin then
+
+ slot.put(" ")
+
+ ui.link{
+ attr = { class = { "admin_only" } },
+ text = _"Admin",
+ module = 'admin',
+ view = 'index'
+ }
+
+ end
+ end }
+
end
end)
diff -r 336476245f3f -r 699b9fa7bc36 app/main/_filter_view/32_searchbox.lua
--- a/app/main/_filter_view/32_searchbox.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/app/main/_filter_view/32_searchbox.lua Sat Mar 10 16:57:49 2012 +0100
@@ -2,7 +2,7 @@
execute.inner()
return
end
-
+--[[
slot.select('searchbox', function()
ui.form{
@@ -30,5 +30,5 @@
}
end)
-
+--]]
execute.inner();
\ No newline at end of file
diff -r 336476245f3f -r 699b9fa7bc36 app/main/area/show_tab.lua
--- a/app/main/area/show_tab.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/app/main/area/show_tab.lua Sat Mar 10 16:57:49 2012 +0100
@@ -1,6 +1,13 @@
local area = param.get("area", "table") or Area:by_id(param.get_id())
-local issues_selector = area:get_reference_selector("issues")
+local open_issues_selector = area:get_reference_selector("issues")
+ :add_where("issue.closed ISNULL")
+ :add_order_by("coalesce(issue.fully_frozen + issue.voting_time, issue.half_frozen + issue.verification_time, issue.accepted + issue.discussion_time, issue.created + issue.admission_time) - now()")
+
+local closed_issues_selector = area:get_reference_selector("issues")
+ :add_where("issue.closed NOTNULL")
+ :add_order_by("issue.closed DESC")
+
local members_selector = area:get_reference_selector("members")
local delegations_selector = area:get_reference_selector("delegations")
@@ -10,20 +17,34 @@
static_params = { area_id = area.id },
}
-tabs[#tabs+1] =
- {
- name = "issues",
- label = _"Issues" .. " (" .. tostring(issues_selector:count()) .. ")",
- icon = { static = "icons/16/folder.png" },
- module = "issue",
- view = "_list",
- params = {
- issues_selector = issues_selector,
- filter = cgi.params["filter"],
- filter_voting = param.get("filter_voting"),
- for_area_list = true
- }
+tabs[#tabs+1] = {
+ name = "timeline",
+ label = _"Events",
+ module = "event",
+ view = "_list",
+ params = { for_area = area }
+}
+
+tabs[#tabs+1] = {
+ name = "open",
+ label = _"Open issues",
+ module = "issue",
+ view = "_list",
+ params = {
+ for_state = "open",
+ issues_selector = open_issues_selector, for_area = true
}
+}
+tabs[#tabs+1] = {
+ name = "closed",
+ label = _"Closed issues",
+ module = "issue",
+ view = "_list",
+ params = {
+ for_state = "closed",
+ issues_selector = closed_issues_selector, for_area = true
+ }
+}
if app.session.member_id then
tabs[#tabs+1] =
diff -r 336476245f3f -r 699b9fa7bc36 app/main/event/_list.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/main/event/_list.lua Sat Mar 10 16:57:49 2012 +0100
@@ -0,0 +1,174 @@
+local global = param.get("global", atom.boolean)
+local for_member = param.get("for_member", "table")
+local for_unit = param.get("for_unit", "table")
+local for_area = param.get("for_area", "table")
+
+local event_selector = Event:new_selector()
+ :add_order_by("event.id DESC")
+ :limit(25)
+ :join("issue", nil, "issue.id = event.issue_id")
+
+if for_member then
+ event_selector:add_where{ "event.member_id = ?", for_member.id }
+elseif for_unit then
+ event_selector:join("area", nil, "area.id = issue.area_id")
+ event_selector:add_where{ "area.unit_id = ?", for_unit.id }
+elseif for_area then
+ event_selector:add_where{ "issue.area_id = ?", for_area.id }
+elseif not global then
+ event_selector:join("event_seen_by_member", nil, { "event_seen_by_member.id = event.id AND event_seen_by_member.seen_by_member_id = ?", app.session.member_id })
+end
+
+if app.session.member_id then
+ event_selector
+ :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", app.session.member.id } )
+ :add_field("(_interest.member_id NOTNULL)", "is_interested")
+ :left_join("delegating_interest_snapshot", "_delegating_interest", { "_delegating_interest.issue_id = issue.id AND _delegating_interest.member_id = ? AND _delegating_interest.event = issue.latest_snapshot_event", app.session.member.id } )
+ :add_field("_delegating_interest.delegate_member_ids[1]", "is_interested_by_delegation_to_member_id")
+ :add_field("_delegating_interest.delegate_member_ids[array_upper(_delegating_interest.delegate_member_ids, 1)]", "is_interested_via_member_id")
+ :add_field("array_length(_delegating_interest.delegate_member_ids, 1)", "delegation_chain_length")
+end
+
+--local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = { member = app.session.member }}
+
+--filters.content = function()
+
+ ui.container{ attr = { class = "issues events" }, content = function()
+
+ local last_event_date
+ for i, event in ipairs(event_selector:exec()) do
+ if event.occurrence.date ~= last_event_date then
+ ui.container{ attr = { class = "date" }, content = format.date(event.occurrence.date) }
+ last_event_date = event.occurrence.date
+ end
+ local class = "issue"
+ if event.is_interested then
+ class = class .. " interested"
+ elseif event.is_interested_by_delegation_to_member_id then
+ class = class .. " interested_by_delegation"
+ end
+ ui.container{ attr = { class = class }, content = function()
+
+ ui.container { attr = { class = "issue_info" }, content = function()
+
+ ui.container{ content = function()
+ ui.link{
+ attr = { class = "issue_id" },
+ text = _("Issue ##{id}", { id = tostring(event.issue_id) }),
+ module = "issue",
+ view = "show",
+ id = event.issue_id
+ }
+
+ slot.put(" · ")
+ ui.tag{ content = event.issue.area.name }
+ slot.put(" · ")
+ ui.tag{ content = event.issue.area.unit.name }
+ slot.put(" · ")
+ ui.tag{ content = event.issue.policy.name }
+ end }
+
+ ui.container{ attr = { class = "issue_policy_info" }, content = function()
+ if event.member_id then
+ ui.link{
+ content = function()
+ execute.view{
+ module = "member_image",
+ view = "_show",
+ params = {
+ member = event.member,
+ image_type = "avatar",
+ show_dummy = true,
+ class = "micro_avatar",
+ popup_text = text
+ }
+ }
+ end,
+ module = "member", view = "show", id = event.member_id
+ }
+ slot.put(" ")
+ ui.link{
+ text = event.member.name,
+ module = "member", view = "show", id = event.member_id
+ }
+ slot.put(" · ")
+ end
+ local event_name = event.event_name
+ local event_image
+ if event.event == "issue_state_changed" then
+ if event.state == "discussion" then
+ event_name = _"Discussion started"
+ event_image = "new.png"
+ elseif event.state == "verification" then
+ event_name = _"Verification started"
+ event_image = "lock.png"
+ elseif event.state == "voting" then
+ event_name = _"Voting started"
+ event_image = "email_open.png"
+ else
+ event_name = event.state_name
+ end
+ if event_image then
+ ui.image{ static = "icons/16/" .. event_image }
+ end
+ end
+ ui.tag{ attr = { class = "event_name" }, content = event_name }
+ slot.put(" · ")
+ ui.tag{ attr = { class = "time" }, content = format.time(event.occurrence) }
+ end }
+
+ end }
+
+ if event.suggestion_id then
+ ui.container{ attr = { class = "suggestion" }, content = function()
+ ui.link{
+ text = event.suggestion.name,
+ module = "suggestion", view = "show", id = event.suggestion_id
+ }
+ end }
+ end
+
+ ui.container{ attr = { class = "initiative_list" }, content = function()
+ if not event.initiative_id then
+ local initiatives_selector = Initiative:new_selector()
+ :add_where{ "initiative.issue_id = ?", event.issue_id }
+ :add_order_by("initiative.rank, initiative.supporter_count")
+ execute.view{ module = "initiative", view = "_list", params = {
+ issue = event.issue,
+ initiatives_selector = initiatives_selector,
+ no_sort = true,
+ limit = 3
+ } }
+ else
+ local initiatives_selector = Initiative:new_selector()
+ :add_where{ "initiative.id = ?", event.initiative_id }
+ execute.view{ module = "initiative", view = "_list", params = {
+ issue = event.issue,
+ initiatives_selector = initiatives_selector,
+ no_sort = true,
+ limit = 1
+ } }
+ end
+ end }
+
+ --[[
+ if event.initiative_id then
+ ui.container{ attr = { class = "initiative_id" }, content = event.initiative_id }
+ end
+ if event.draft_id then
+ ui.container{ attr = { class = "draft_id" }, content = event.draft_id }
+ end
+ if event.suggestion_id then
+ ui.container{ attr = { class = "suggestion_id" }, content = event.suggestion_id }
+ end
+ --]]
+
+ end }
+ end
+
+ end }
+
+--end
+
+--filters.selector = event_selector
+--ui.filters(filters)
\ No newline at end of file
diff -r 336476245f3f -r 699b9fa7bc36 app/main/index/index.lua
--- a/app/main/index/index.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/app/main/index/index.lua Sat Mar 10 16:57:49 2012 +0100
@@ -1,16 +1,3 @@
-slot.select("title", function()
- if app.session.member then
- execute.view{
- module = "member_image",
- view = "_show",
- params = {
- member = app.session.member,
- image_type = "avatar"
- }
- }
- end
-end)
-
slot.select("title", function()
ui.container{
attr = { class = "lang_chooser" },
diff -r 336476245f3f -r 699b9fa7bc36 app/main/initiative/_list_element.lua
--- a/app/main/initiative/_list_element.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/app/main/initiative/_list_element.lua Sat Mar 10 16:57:49 2012 +0100
@@ -9,8 +9,10 @@
and initiative.issue.ranks_available or initiative.admitted == false
then
ui.field.rank{ attr = { class = "rank" }, value = initiative.rank, eligible = initiative.eligible }
+ elseif not initiative.issue.closed then
+ ui.image{ static = "icons/16/script.png" }
else
- ui.image{ static = "icons/16/script.png" }
+ ui.image{ static = "icons/16/cross.png" }
end
end }
diff -r 336476245f3f -r 699b9fa7bc36 app/main/issue/_filters.lua
--- a/app/main/issue/_filters.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/app/main/issue/_filters.lua Sat Mar 10 16:57:49 2012 +0100
@@ -1,69 +1,226 @@
local member = param.get("member", "table")
+local state = param.get("state")
+local for_unit = param.get("for_unit", atom.boolean)
+local for_area = param.get("for_area", atom.boolean)
local filters = {}
--- FIXME: the filter should be named like the corresponding issue.state value
+if member then
+ local filter = {
+ name = "filter_interest",
+ }
+ if not for_unit and not for_area then
+ filter[#filter+1] = {
+ name = "any",
+ label = _"All units",
+ selector_modifier = function() end
+ }
+ filter[#filter+1] = {
+ name = "unit",
+ label = _"My units",
+ selector_modifier = function(selector)
+ selector:join("area", nil, "area.id = issue.area_id")
+ selector:join("privilege", nil, { "privilege.unit_id = area.unit_id AND privilege.member_id = ? AND privilege.voting_right", member.id })
+ end
+ }
+ end
+ if for_unit and not for_area then
+ filter[#filter+1] = {
+ name = "any",
+ label = _"All areas",
+ selector_modifier = function() end
+ }
+ end
+ if not for_area then
+ filter[#filter+1] = {
+ name = "area",
+ label = _"My areas",
+ selector_modifier = function(selector)
+ selector:join("membership", nil, { "membership.area_id = issue.area_id AND membership.member_id = ?", member.id })
+ end
+ }
+ end
+ if for_area then
+ filter[#filter+1] = {
+ name = "any",
+ label = _"All issues",
+ selector_modifier = function() end
+ }
+ end
+ filter[#filter+1] = {
+ name = "issue",
+ label = _"Interested",
+ selector_modifier = function() end
+ }
+ filter[#filter+1] = {
+ name = "supported",
+ label = _"Supported",
+ selector_modifier = function() end
+ }
+ filter[#filter+1] = {
+ name = "potentially_supported",
+ label = _"Potentially supported",
+ selector_modifier = function() end
+ }
+ filter[#filter+1] = {
+ name = "initiated",
+ label = _"Initiated",
+ selector_modifier = function(selector)
+ selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN initiator ON initiator.initiative_id = initiative.id AND initiator.member_id = ? AND initiator.accepted WHERE initiative.issue_id = issue.id)", member.id })
+ end
+ }
+
+ filters[#filters+1] = filter
+end
-filters[#filters+1] = {
- name = "filter",
- {
- name = "any",
- label = _"Any phase",
- selector_modifier = function(selector) end
- },
- {
+
+
+if app.session.member then
+
+ local filter_interest = param.get_all_cgi()["filter_interest"]
+
+ if filter_interest ~= "any" and filter_interest ~= nil and (
+ filter_interest == "issue" or filter_interest == "supported" or filter_interest == "potentially_supported"
+ ) then
+ filters[#filters+1] = {
+ name = "filter_delegation",
+ {
+ name = "any",
+ label = _"Direct and by delegation",
+ selector_modifier = function(selector)
+ if filter_interest == "issue" then
+ selector:left_join("delegating_interest_snapshot", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? AND filter_interest.event = issue.latest_snapshot_event", member.id })
+ selector:left_join("interest", "filter_delegating_interest", { "filter_delegating_interest.issue_id = issue.id AND filter_delegating_interest.member_id = ? ", member.id })
+ selector:add_where{ "filter_interest.member_id NOTNULL OR filter_delegating_interest.member_id NOTNULL" }
+ elseif filter_interest == "supported" then
+ selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = ? WHERE initiative.issue_id = issue.id AND critical_opinion.member_id ISNULL LIMIT 1) OR EXISTS (SELECT 1 FROM initiative JOIN direct_supporter_snapshot ON direct_supporter_snapshot.initiative_id = initiative.id AND direct_supporter_snapshot.event = issue.latest_snapshot_event JOIN delegating_interest_snapshot ON delegating_interest_snapshot.delegate_member_ids[array_upper(delegating_interest_snapshot.delegate_member_ids, 1)] = direct_supporter_snapshot.member_id AND delegating_interest_snapshot.issue_id = issue.id AND delegating_interest_snapshot.member_id = ? AND delegating_interest_snapshot.event = issue.latest_snapshot_event WHERE initiative.issue_id = issue.id AND direct_supporter_snapshot.satisfied LIMIT 1)", member.id, member.id, member.id })
+ elseif filter_interest == "potentially_supported" then
+ selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = ? WHERE initiative.issue_id = issue.id LIMIT 1) OR EXISTS (SELECT 1 FROM initiative JOIN direct_supporter_snapshot ON direct_supporter_snapshot.initiative_id = initiative.id AND direct_supporter_snapshot.event = issue.latest_snapshot_event JOIN delegating_interest_snapshot ON delegating_interest_snapshot.delegate_member_ids[array_upper(delegating_interest_snapshot.delegate_member_ids, 1)] = direct_supporter_snapshot.member_id AND delegating_interest_snapshot.issue_id = issue.id AND delegating_interest_snapshot.member_id = ? AND delegating_interest_snapshot.event = issue.latest_snapshot_event WHERE initiative.issue_id = issue.id AND NOT direct_supporter_snapshot.satisfied LIMIT 1)", member.id, member.id, member.id, member.id })
+ end
+ end
+ },
+ {
+ name = "direct",
+ label = _"Direct",
+ selector_modifier = function(selector)
+ if filter_interest == "issue" then
+ selector:join("interest", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? ", member.id })
+ elseif filter_interest == "supported" then
+ selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = ? WHERE initiative.issue_id = issue.id AND critical_opinion.member_id ISNULL LIMIT 1)", member.id, member.id })
+ elseif filter_interest == "potentially_supported" then
+ selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = ? WHERE initiative.issue_id = issue.id LIMIT 1)", member.id, member.id })
+ end
+ end
+ },
+ {
+ name = "delegated",
+ label = _"By delegation",
+ selector_modifier = function(selector)
+ if filter_interest == "issue" then
+ selector:join("delegating_interest_snapshot", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? AND filter_interest.event = issue.latest_snapshot_event", member.id })
+ elseif filter_interest == "supported" then
+ selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN direct_supporter_snapshot ON direct_supporter_snapshot.initiative_id = initiative.id AND direct_supporter_snapshot.event = issue.latest_snapshot_event JOIN delegating_interest_snapshot ON delegating_interest_snapshot.delegate_member_ids[array_upper(delegating_interest_snapshot.delegate_member_ids, 1)] = direct_supporter_snapshot.member_id AND delegating_interest_snapshot.issue_id = issue.id AND delegating_interest_snapshot.member_id = ? AND delegating_interest_snapshot.event = issue.latest_snapshot_event WHERE initiative.issue_id = issue.id AND direct_supporter_snapshot.satisfied LIMIT 1)", member.id })
+ elseif filter_interest == "potentially_supported" then
+ selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN direct_supporter_snapshot ON direct_supporter_snapshot.initiative_id = initiative.id AND direct_supporter_snapshot.event = issue.latest_snapshot_event JOIN delegating_interest_snapshot ON delegating_interest_snapshot.delegate_member_ids[array_upper(delegating_interest_snapshot.delegate_member_ids, 1)] = direct_supporter_snapshot.member_id AND delegating_interest_snapshot.issue_id = issue.id AND delegating_interest_snapshot.member_id = ? AND delegating_interest_snapshot.event = issue.latest_snapshot_event WHERE initiative.issue_id = issue.id AND NOT direct_supporter_snapshot.satisfied LIMIT 1)", member.id, member.id })
+ end
+ end
+ }
+ }
+ end
+
+end
+
+local filter = { name = "filter" }
+
+filter[#filter+1] = {
+ name = "any",
+ label = _"Any phase",
+ selector_modifier = function(selector) end
+}
+
+if not state or state == "open" then
+ filter[#filter+1] = {
name = "open",
label = _"Open",
selector_modifier = function(selector)
selector:add_where("issue.closed ISNULL")
end
- },
- {
+ }
+ filter[#filter+1] = {
name = "new",
label = _"New",
selector_modifier = function(selector)
selector:add_where("issue.accepted ISNULL AND issue.closed ISNULL")
end
- },
- {
+ }
+ filter[#filter+1] = {
name = "accepted",
label = _"Discussion",
selector_modifier = function(selector)
selector:add_where("issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL")
end
- },
- {
+ }
+ filter[#filter+1] = {
name = "half_frozen",
label = _"Frozen",
selector_modifier = function(selector)
selector:add_where("issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL")
end
- },
- {
+ }
+ filter[#filter+1] = {
name = "frozen",
label = _"Voting",
selector_modifier = function(selector)
selector:add_where("issue.fully_frozen NOTNULL AND issue.closed ISNULL")
filter_voting = true
end
- },
- {
+ }
+end
+
+if not state then
+ filter[#filter+1] = {
name = "finished",
label = _"Finished",
selector_modifier = function(selector)
selector:add_where("issue.closed NOTNULL AND issue.fully_frozen NOTNULL")
end
- },
- {
+ }
+ filter[#filter+1] = {
name = "cancelled",
label = _"Cancelled",
selector_modifier = function(selector)
selector:add_where("issue.closed NOTNULL AND issue.fully_frozen ISNULL")
end
}
-}
+end
+if state == "closed" then
+ filter[#filter+1] = {
+ name = "finished_with_winner",
+ label = _"Finished with winner",
+ selector_modifier = function(selector)
+ selector:add_where("issue.state = 'finished_with_winner'")
+ end
+ }
+ filter[#filter+1] = {
+ name = "finished_without_winner",
+ label = _"Finished without winner",
+ selector_modifier = function(selector)
+ selector:add_where("issue.state = 'finished_without_winner'")
+ end
+ }
+ filter[#filter+1] = {
+ name = "cancelled",
+ label = _"Cancelled",
+ selector_modifier = function(selector)
+ selector:add_where("issue.state NOT IN ('finished_with_winner', 'finished_without_winner')")
+ end
+ }
+end
+filters[#filters+1] = filter
+
+--[[
if not param.get("no_sort", atom.boolean) then
local filter = { name = "order" }
@@ -100,103 +257,7 @@
filters[#filters+1] = filter
end
-
-if app.session.member then
- local filter = {
- name = "filter_interest",
- {
- name = "any",
- label = _"Any",
- selector_modifier = function() end
- },
- {
- name = "my",
- label = _"Interested",
- selector_modifier = function() end
- },
- {
- name = "supported",
- label = _"Supported",
- selector_modifier = function() end
- },
- {
- name = "potentially_supported",
- label = _"Potentially supported",
- selector_modifier = function() end
- },
- {
- name = "initiated",
- label = _"Initiated",
- selector_modifier = function(selector)
- selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN initiator ON initiator.initiative_id = initiative.id AND initiator.member_id = ? AND initiator.accepted WHERE initiative.issue_id = issue.id)", member.id })
- end
- },
- }
-
- --[[
- if param.get_all_cgi()["filter"] == "finished" then
- filter[#filter+1] = {
- name = "voted",
- label = _"Voted",
- selector_modifier = function(selector)
- selector:add_where({ "EXISTS (SELECT 1 FROM vote WHERE vote.issue_id = issue.id AND vote.member_id = ?)", member.id })
- end
- }
- end
- --]]
-
- filters[#filters+1] = filter
-
- local filter_interest = param.get_all_cgi()["filter_interest"]
-
- if filter_interest ~= "any" and filter_interest ~= nil and filter_interest ~= "initiated" then
- filters[#filters+1] = {
- name = "filter_delegation",
- {
- name = "any",
- label = _"Direct and by delegation",
- selector_modifier = function(selector)
- if filter_interest == "my" then
- selector:left_join("delegating_interest_snapshot", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? AND filter_interest.event = issue.latest_snapshot_event", member.id })
- selector:left_join("interest", "filter_delegating_interest", { "filter_delegating_interest.issue_id = issue.id AND filter_delegating_interest.member_id = ? ", member.id })
- selector:add_where{ "filter_interest.member_id NOTNULL OR filter_delegating_interest.member_id NOTNULL" }
- elseif filter_interest == "supported" then
- selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = ? WHERE initiative.issue_id = issue.id AND critical_opinion.member_id ISNULL LIMIT 1) OR EXISTS (SELECT 1 FROM initiative JOIN direct_supporter_snapshot ON direct_supporter_snapshot.initiative_id = initiative.id AND direct_supporter_snapshot.event = issue.latest_snapshot_event JOIN delegating_interest_snapshot ON delegating_interest_snapshot.delegate_member_ids[array_upper(delegating_interest_snapshot.delegate_member_ids, 1)] = direct_supporter_snapshot.member_id AND delegating_interest_snapshot.issue_id = issue.id AND delegating_interest_snapshot.member_id = ? AND delegating_interest_snapshot.event = issue.latest_snapshot_event WHERE initiative.issue_id = issue.id AND direct_supporter_snapshot.satisfied LIMIT 1)", member.id, member.id, member.id })
- elseif filter_interest == "potentially_supported" then
- selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = ? WHERE initiative.issue_id = issue.id LIMIT 1) OR EXISTS (SELECT 1 FROM initiative JOIN direct_supporter_snapshot ON direct_supporter_snapshot.initiative_id = initiative.id AND direct_supporter_snapshot.event = issue.latest_snapshot_event JOIN delegating_interest_snapshot ON delegating_interest_snapshot.delegate_member_ids[array_upper(delegating_interest_snapshot.delegate_member_ids, 1)] = direct_supporter_snapshot.member_id AND delegating_interest_snapshot.issue_id = issue.id AND delegating_interest_snapshot.member_id = ? AND delegating_interest_snapshot.event = issue.latest_snapshot_event WHERE initiative.issue_id = issue.id AND NOT direct_supporter_snapshot.satisfied LIMIT 1)", member.id, member.id, member.id, member.id })
- end
- end
- },
- {
- name = "direct",
- label = _"Direct",
- selector_modifier = function(selector)
- if filter_interest == "my" then
- selector:join("interest", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? ", member.id })
- elseif filter_interest == "supported" then
- selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = ? WHERE initiative.issue_id = issue.id AND critical_opinion.member_id ISNULL LIMIT 1)", member.id, member.id })
- elseif filter_interest == "potentially_supported" then
- selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = ? WHERE initiative.issue_id = issue.id LIMIT 1)", member.id, member.id })
- end
- end
- },
- {
- name = "delegated",
- label = _"By delegation",
- selector_modifier = function(selector)
- if filter_interest == "my" then
- selector:join("delegating_interest_snapshot", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? AND filter_interest.event = issue.latest_snapshot_event", member.id })
- elseif filter_interest == "supported" then
- selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN direct_supporter_snapshot ON direct_supporter_snapshot.initiative_id = initiative.id AND direct_supporter_snapshot.event = issue.latest_snapshot_event JOIN delegating_interest_snapshot ON delegating_interest_snapshot.delegate_member_ids[array_upper(delegating_interest_snapshot.delegate_member_ids, 1)] = direct_supporter_snapshot.member_id AND delegating_interest_snapshot.issue_id = issue.id AND delegating_interest_snapshot.member_id = ? AND delegating_interest_snapshot.event = issue.latest_snapshot_event WHERE initiative.issue_id = issue.id AND direct_supporter_snapshot.satisfied LIMIT 1)", member.id })
- elseif filter_interest == "potentially_supported" then
- selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN direct_supporter_snapshot ON direct_supporter_snapshot.initiative_id = initiative.id AND direct_supporter_snapshot.event = issue.latest_snapshot_event JOIN delegating_interest_snapshot ON delegating_interest_snapshot.delegate_member_ids[array_upper(delegating_interest_snapshot.delegate_member_ids, 1)] = direct_supporter_snapshot.member_id AND delegating_interest_snapshot.issue_id = issue.id AND delegating_interest_snapshot.member_id = ? AND delegating_interest_snapshot.event = issue.latest_snapshot_event WHERE initiative.issue_id = issue.id AND NOT direct_supporter_snapshot.satisfied LIMIT 1)", member.id, member.id })
- end
- end
- }
- }
- end
-
-end
+--]]
if app.session.member and member.id == app.session.member_id and (param.get_all_cgi()["filter"] == "frozen") then
filters[#filters+1] = {
@@ -224,31 +285,8 @@
}
end
-if member then
- filters[#filters+1] = {
- name = "filter_membership",
- {
- name = "any",
- label = _"All units",
- selector_modifier = function() end
- },
- {
- name = "unit",
- label = _"My units",
- selector_modifier = function(selector)
- selector:join("area", nil, "area.id = issue.area_id")
- selector:join("privilege", nil, { "privilege.unit_id = area.unit_id AND privilege.member_id = ? AND privilege.voting_right", member.id })
- end
- },
- {
- name = "area",
- label = _"My areas",
- selector_modifier = function(selector)
- selector:join("membership", nil, { "membership.area_id = issue.area_id AND membership.member_id = ?", member.id })
- end
- },
- }
-end
+
+
function filters:get_filter(group, name)
for i,grp in ipairs(self) do
diff -r 336476245f3f -r 699b9fa7bc36 app/main/issue/_list.lua
--- a/app/main/issue/_list.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/app/main/issue/_list.lua Sat Mar 10 16:57:49 2012 +0100
@@ -1,5 +1,15 @@
local issues_selector = param.get("issues_selector", "table")
local for_member = param.get("for_member", "table") or app.session.member
+local for_state = param.get("for_state")
+local for_unit = param.get("for_unit", atom.boolean)
+local for_area = param.get("for_area", atom.boolean)
+
+
+if for_state == "open" then
+ issues_selector:add_where("issue.closed ISNULL")
+elseif for_state == "closed" then
+ issues_selector:add_where("issue.closed NOTNULL")
+end
if app.session.member_id then
issues_selector
@@ -20,7 +30,9 @@
"issue_list"
}
-local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = { member = for_member }}
+local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = {
+ member = for_member, state = for_state, for_unit = for_unit, for_area = for_area
+}}
filters.content = function()
ui.paginate{
@@ -120,6 +132,9 @@
ui.tag{ content = issue.area.name }
slot.put(" · ")
ui.tag{ content = issue.area.unit.name }
+ slot.put(" · ")
+ ui.tag{ content = issue.policy.name }
+
end
}
@@ -128,14 +143,15 @@
tag = "div",
content = function()
- ui.tag{ content = issue.policy.name }
-
- slot.put(" · ")
- ui.tag{ content = issue.state_name }
+ ui.tag{ attr = { class = "event_name" }, content = issue.state_name }
if issue.state_time_left then
slot.put(" · ")
- ui.tag{ content = _("#{time_left} left", { time_left = issue.state_time_left:gsub("days", _"days"):gsub("day", _"day") }) }
+ if issue.state_time_left:sub(1,1) == "-" then
+ ui.tag{ content = _("Counting starts soon") }
+ else
+ ui.tag{ content = _("#{time_left} left", { time_left = issue.state_time_left:gsub("days", _"days"):gsub("day", _"day") }) }
+ end
end
end
diff -r 336476245f3f -r 699b9fa7bc36 app/main/member/_area_list.lua
--- a/app/main/member/_area_list.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/app/main/member/_area_list.lua Sat Mar 10 16:57:49 2012 +0100
@@ -49,7 +49,10 @@
else
ui.container{ attr = { class = "voting_priv_info" }, content = _"You have voting privileges for this unit, but you are not member of any of its areas." }
end
+ ui.container{ content = function()
+ ui.link{ content = _"Show all areas of unit", module = "unit", view = "show", id = unit.id }
+ end }
+
end }
-
+
end
-
diff -r 336476245f3f -r 699b9fa7bc36 app/main/member/_event_list.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/main/member/_event_list.lua Sat Mar 10 16:57:49 2012 +0100
@@ -0,0 +1,27 @@
+local member = param.get("member", "table")
+local events = param.get_all_cgi()["events"] or "personal"
+
+ui.container{ attr = { class = "ui_filter_head" }, content = function()
+
+ ui.link{
+ attr = { class = events == "personal" and "ui_tabs_link active" or nil },
+ text = _"Personal timeline",
+ module = "index", view = "index", params = { tab = "timeline", events = "personal" }
+ }
+
+ ui.link{
+ attr = { class = events == "global" and "active" or nil },
+ text = _"Global timeline",
+ module = "index", view = "index", params = { tab = "timeline", events = "global" }
+ }
+end }
+
+if events == "personal" then
+ execute.view{
+ module = "event", view = "_list"
+ }
+elseif events == "global" then
+ execute.view{
+ module = "event", view = "_list", params = { global = true }
+ }
+end
diff -r 336476245f3f -r 699b9fa7bc36 app/main/member/settings.lua
--- a/app/main/member/settings.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/app/main/member/settings.lua Sat Mar 10 16:57:49 2012 +0100
@@ -13,13 +13,6 @@
local pages = {}
-pages[#pages+1] = { module = "member", view = "edit", text = _"Edit profile" }
-pages[#pages+1] = { module = "member", view = "edit_images", text = _"Upload images" }
-pages[#pages+1] = { view = "settings_notification", text = _"Notification settings" }
-pages[#pages+1] = { view = "settings_display", text = _"Display settings" }
-if not config.locked_profile_fields.notify_email then
- pages[#pages+1] = { view = "settings_email", text = _"Change your notification email address" }
-end
if not config.locked_profile_fields.name then
pages[#pages+1] = { view = "settings_name", text = _"Change your screen name" }
end
@@ -27,6 +20,11 @@
pages[#pages+1] = { view = "settings_login", text = _"Change your login" }
end
pages[#pages+1] = { view = "settings_password", text = _"Change your password" }
+if not config.locked_profile_fields.notify_email then
+ pages[#pages+1] = { view = "settings_email", text = _"Change your notification email address" }
+end
+pages[#pages+1] = { view = "settings_notification", text = _"Notification settings" }
+pages[#pages+1] = { view = "settings_display", text = _"Display settings" }
pages[#pages+1] = { view = "developer_settings", text = _"Developer settings" }
ui.list{
diff -r 336476245f3f -r 699b9fa7bc36 app/main/member/show_tab.lua
--- a/app/main/member/show_tab.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/app/main/member/show_tab.lua Sat Mar 10 16:57:49 2012 +0100
@@ -169,7 +169,7 @@
view = "_area_list",
params = { areas_selector = areas_selector, member = member },
}
-
+--[[
local issues_selector = Issue:new_selector()
tabs[#tabs+1] = {
name = "issues",
@@ -184,49 +184,84 @@
filter_interest = (member.id ~= app.session.member_id) and "my" or nil,
},
}
-
-local outgoing_delegations_selector = member:get_reference_selector("outgoing_delegations")
- :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id")
- :add_where("_member_showtab_issue.closed ISNULL")
+--]]
+if show_as_homepage then
+ tabs[#tabs+1] = {
+ name = "timeline",
+ label = _"Events",
+ module = "member",
+ view = "_event_list",
+ params = { }
+ }
+else
+ tabs[#tabs+1] = {
+ name = "timeline",
+ label = _"Events",
+ module = "event",
+ view = "_list",
+ params = { for_member = member }
+ }
+end
+
tabs[#tabs+1] = {
- name = "outgoing_delegations",
- label = _"Outgoing delegations" .. " (" .. tostring(outgoing_delegations_selector:count()) .. ")",
- icon = { static = "icons/16/table_go.png" },
- module = "delegation",
+ name = "open",
+ label = _"Open issues",
+ module = "issue",
view = "_list",
- params = { delegations_selector = outgoing_delegations_selector, outgoing = true },
+ params = {
+ for_state = "open",
+ issues_selector = Issue:new_selector()
+ :add_where("issue.closed ISNULL")
+ :add_order_by("coalesce(issue.fully_frozen + issue.voting_time, issue.half_frozen + issue.verification_time, issue.accepted + issue.discussion_time, issue.created + issue.admission_time) - now()")
+ }
+}
+tabs[#tabs+1] = {
+ name = "closed",
+ label = _"Closed issues",
+ module = "issue",
+ view = "_list",
+ params = {
+ for_state = "closed",
+ issues_selector = Issue:new_selector()
+ :add_where("issue.closed NOTNULL")
+ :add_order_by("issue.closed DESC")
+
+ }
}
-local incoming_delegations_selector = member:get_reference_selector("incoming_delegations")
- :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id")
- :add_where("_member_showtab_issue.closed ISNULL")
-tabs[#tabs+1] = {
- name = "incoming_delegations",
- label = _"Incoming delegations" .. " (" .. tostring(incoming_delegations_selector:count()) .. ")",
- icon = { static = "icons/16/table_go.png" },
- module = "delegation",
- view = "_list",
- params = { delegations_selector = incoming_delegations_selector, incoming = true },
-}
+if not show_as_homepage then
+ local outgoing_delegations_selector = member:get_reference_selector("outgoing_delegations")
+ :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id")
+ :add_where("_member_showtab_issue.closed ISNULL")
+ tabs[#tabs+1] = {
+ name = "outgoing_delegations",
+ label = _"Outgoing delegations" .. " (" .. tostring(outgoing_delegations_selector:count()) .. ")",
+ icon = { static = "icons/16/table_go.png" },
+ module = "delegation",
+ view = "_list",
+ params = { delegations_selector = outgoing_delegations_selector, outgoing = true },
+ }
-local contacts_selector = member:get_reference_selector("saved_members"):add_where("public")
-tabs[#tabs+1] = {
- name = "contacts",
- label = _"Contacts" .. " (" .. tostring(contacts_selector:count()) .. ")",
- icon = { static = "icons/16/book_edit.png" },
- module = "member",
- view = "_list",
- params = { members_selector = contacts_selector },
-}
+ local incoming_delegations_selector = member:get_reference_selector("incoming_delegations")
+ :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id")
+ :add_where("_member_showtab_issue.closed ISNULL")
+ tabs[#tabs+1] = {
+ name = "incoming_delegations",
+ label = _"Incoming delegations" .. " (" .. tostring(incoming_delegations_selector:count()) .. ")",
+ icon = { static = "icons/16/table_go.png" },
+ module = "delegation",
+ view = "_list",
+ params = { delegations_selector = incoming_delegations_selector, incoming = true },
+ }
-if show_as_homepage then
+ local contacts_selector = member:get_reference_selector("saved_members"):add_where("public")
tabs[#tabs+1] = {
- name = "profile",
- label = _"Profile",
- icon = { static = "icons/16/application_form.png" },
+ name = "contacts",
+ label = _"Contacts" .. " (" .. tostring(contacts_selector:count()) .. ")",
+ icon = { static = "icons/16/book_edit.png" },
module = "member",
- view = "_profile",
- params = { member = member },
+ view = "_list",
+ params = { members_selector = contacts_selector },
}
end
diff -r 336476245f3f -r 699b9fa7bc36 app/main/unit/show.lua
--- a/app/main/unit/show.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/app/main/unit/show.lua Sat Mar 10 16:57:49 2012 +0100
@@ -44,10 +44,17 @@
:join("privilege", "trustee_privilege", "trustee_privilege.member_id = trustee.id AND trustee_privilege.unit_id = delegation.unit_id AND trustee_privilege.voting_right")
:add_where{ "delegation.unit_id = ?", unit.id }
-local issues_selector = Issue:new_selector()
+local open_issues_selector = Issue:new_selector()
:join("area", nil, "area.id = issue.area_id")
:add_where{ "area.unit_id = ?", unit.id }
-
+ :add_where("issue.closed ISNULL")
+ :add_order_by("coalesce(issue.fully_frozen + issue.voting_time, issue.half_frozen + issue.verification_time, issue.accepted + issue.discussion_time, issue.created + issue.admission_time) - now()")
+
+local closed_issues_selector = Issue:new_selector()
+ :join("area", nil, "area.id = issue.area_id")
+ :add_where{ "area.unit_id = ?", unit.id }
+ :add_where("issue.closed NOTNULL")
+ :add_order_by("issue.closed DESC")
local tabs = {
module = "unit",
@@ -64,11 +71,32 @@
}
tabs[#tabs+1] = {
- name = "issues",
- label = _"Issues",
+ name = "timeline",
+ label = _"Events",
+ module = "event",
+ view = "_list",
+ params = { for_unit = unit }
+}
+
+tabs[#tabs+1] = {
+ name = "open",
+ label = _"Open issues",
module = "issue",
view = "_list",
- params = { issues_selector = issues_selector }
+ params = {
+ for_state = "open",
+ issues_selector = open_issues_selector, for_unit = true
+ }
+}
+tabs[#tabs+1] = {
+ name = "closed",
+ label = _"Closed issues",
+ module = "issue",
+ view = "_list",
+ params = {
+ for_state = "closed",
+ issues_selector = closed_issues_selector, for_unit = true
+ }
}
if app.session.member_id then
diff -r 336476245f3f -r 699b9fa7bc36 config/default.lua
--- a/config/default.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/config/default.lua Sat Mar 10 16:57:49 2012 +0100
@@ -22,7 +22,6 @@
config.locked_profile_fields = {
field_name = true,
- notify_email = true
}
config.member_image_content_type = "image/jpeg"
diff -r 336476245f3f -r 699b9fa7bc36 config/development.lua
--- a/config/development.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/config/development.lua Sat Mar 10 16:57:49 2012 +0100
@@ -1,4 +1,4 @@
-config.absolute_base_url = "http://localhost/lf/"
+config.absolute_base_url = "http://10.8.33.34/lf/"
execute.config("default")
@@ -50,3 +50,5 @@
group_id = "g.7WDKN3StkEyuWkyN",
cookie_path = "/"
}
+
+config.document_dir = "/home/dark/tmp"
diff -r 336476245f3f -r 699b9fa7bc36 locale/translations.de.lua
--- a/locale/translations.de.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/locale/translations.de.lua Sat Mar 10 16:57:49 2012 +0100
@@ -114,6 +114,7 @@
["Choose member"] = "Mitglied auswählen";
["Click for details"] = "Klicke für Details";
["Closed"] = "geschlossen";
+["Closed issues"] = "Geschlossene Themen";
["Closed user group, please login to participate."] = "Geschlossene Benutzergruppe: Bitte melde dich an um teilzunehmen.";
["Collective opinion of supporters"] = "Meinungsbild der Unterstützer";
["Commit suggestion"] = "Anregung speichern";
@@ -126,6 +127,7 @@
["Contacts"] = "Kontakte";
["Content"] = "Inhalt";
["Counting of votes"] = "Auszählung";
+["Counting starts soon"] = "Auszählung beginnt in Kürze";
["Create / edit area"] = "Themengebiet anlegen / bearbeiten";
["Create / edit policy"] = "Regelwerk anlegen / bearbeiten";
["Create alternative initiative"] = "Alternative Initiative hinzufügen";
@@ -174,6 +176,7 @@
["Discussion"] = "Diskussion";
["Discussion URL"] = "Diskussions-URL";
["Discussion on issue"] = "Diskussion zum Thema";
+["Discussion started"] = "Diskussion gestartet";
["Discussion time"] = "Zeit für die Diskussion";
["Discussion with initiators"] = "Diskussion mit den Initiatoren";
["Discussion, frozen and voting phase"] = "Diskussions-, Eingefroren- und Abstimmphase";
@@ -188,7 +191,6 @@
["Edit initiative"] = "Initiative bearbeiten";
["Edit my page"] = "Meine Seite bearbeiten";
["Edit my profile"] = "Mein Profil bearbeiten";
-["Edit profile"] = "Profil bearbeiten";
["Eligible as winner"] = "Als Gewinner qualifiziert";
["Email address"] = "E-Mail-Adresse";
["Email address confirmation"] = "Bestätigung der E-Mail-Adresse";
@@ -202,12 +204,15 @@
["Error while updating member, database reported:
(#{errormessage})"] = "Fehler beim aktualisieren des Mitglieds, die Datenbank berichtet folgenden Fehler:
(#{errormessage})";
["Etherpad authentication failed"] = "Etherpad-Anmeldung fehlgeschlagen";
["Event #{id} -> #{num} members"] = false;
+["Events"] = "Ereignisse";
["External memberships"] = "Externe Mitgliedschaften";
["External posts"] = "Externe Ämter";
["Finish voting"] = "Stimmabgabe abschließen";
["Finished"] = "Abgeschlossen";
["Finished (with winner)"] = "Abgeschlossen (mit Gewinner)";
["Finished (without winner)"] = "Abgeschlossen (ohne Gewinner)";
+["Finished with winner"] = "Abgeschlossen mit Gewinner";
+["Finished without winner"] = "Abgeschlossen ohne Gewinner";
["Friday"] = "Freitag";
["Frozen"] = "Eingefroren";
["Frozen and voting phase"] = "Eingefroren- und Abstimmphase";
@@ -216,6 +221,7 @@
["Generate API key"] = "API-Schlüssel erzeugen";
["Global delegation"] = "Globale Delegation";
["Global delegation set to '#{name}'"] = "Globale Delegation an '#{name}' erteilt";
+["Global timeline"] = false;
["Half frozen at"] = "Halb eingefroren am/um";
["Hello\n\n"] = "Hallo\n\n";
["Hello "] = "Hallo ";
@@ -347,7 +353,6 @@
["New draft has been added to initiative"] = "Neuer Entwurf wurde der Initiative hinzugefügt";
["New initiative"] = "Neue Initiative";
["New initiative draft"] = "Neuer Entwurfstext der Initiative";
-["New initiative in existing issue"] = "Neue Initiative in bestehenden Thema";
["New issue"] = "Neues Thema";
["New password"] = "Neues Kennwort";
["New passwords does not match."] = "Du hast nicht zweimal das gleiche Kennwort eingegeben";
@@ -389,6 +394,7 @@
["One step back"] = "Ein Schritt zurück";
["Open"] = "Offen";
["Open initiatives you are supporting which has been updated their draft:"] = "Offene, von dir unterstützte Initiativen, deren Antragstext aktualisiert wurde:";
+["Open issues"] = "Offene Themen";
["OpenID"] = false;
["OpenID Login"] = false;
["Opinions"] = "Meinungen";
@@ -403,6 +409,7 @@
["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 muss zumindest 8 Zeichen lang sein!";
+["Personal timeline"] = false;
["Phases"] = "Phasen";
["Phone"] = "Telefon";
["Photo"] = "Foto";
@@ -432,6 +439,7 @@
["Potentially supported"] = "Potentiell unterstützt";
["Preview"] = "Vorschau";
["Profession"] = "Beruf";
+["Profil"] = false;
["Profile"] = "Profil";
["Publish"] = "Veröffentlichen";
["Published"] = "veröffentlicht";
@@ -487,6 +495,7 @@
["Settings"] = "Einstellungen";
["Show"] = "Zeige";
["Show active members"] = "Zeige aktive Mitglieder";
+["Show all areas of unit"] = "Zeige alle Themengebiete der Gliederung";
["Show areas in use"] = "Zeige verwendete Themenbereiche";
["Show areas not in use"] = "Zeige nicht verwendete Themenbereiche";
["Show diff"] = "Änderungen anzeigen";
@@ -586,6 +595,7 @@
["Unknown author"] = "Unbekannter Autor";
["Updated drafts"] = "Neue Entwürfe";
["Upload images"] = "Bilder hochladen";
+["Verification started"] = "Phase Überprüfung gestartet";
["Verification time"] = "Zeit für die Überprüfung";
["Version"] = "Version";
["Vote now"] = "Jetzt abstimmen";
diff -r 336476245f3f -r 699b9fa7bc36 model/event.lua
--- a/model/event.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/model/event.lua Sat Mar 10 16:57:49 2012 +0100
@@ -9,11 +9,27 @@
ref = 'issue',
}
+Event:add_reference{
+ mode = 'm1',
+ to = "Suggestion",
+ this_key = 'suggestion_id',
+ that_key = 'id',
+ ref = 'suggestion',
+}
+
+Event:add_reference{
+ mode = 'm1',
+ to = "Member",
+ this_key = 'member_id',
+ that_key = 'id',
+ ref = 'member',
+}
+
function Event.object_get:event_name()
return ({
issue_state_changed = _"Issue reached next phase",
initiative_created_in_new_issue = _"New issue",
- initiative_created_in_existing_issue = _"New initiative in existing issue",
+ initiative_created_in_existing_issue = _"New initiative",
initiative_revoked = _"Initiative revoked",
new_draft_created = _"New initiative draft",
suggestion_created = _"New suggestion"
diff -r 336476245f3f -r 699b9fa7bc36 model/event_seen_by_member.lua
--- a/model/event_seen_by_member.lua Sat Mar 10 13:54:14 2012 +0100
+++ b/model/event_seen_by_member.lua Sat Mar 10 16:57:49 2012 +0100
@@ -1,4 +1,2 @@
EventSeenByMember = mondelefant.new_class()
EventSeenByMember.table = 'event_seen_by_member'
-
-
diff -r 336476245f3f -r 699b9fa7bc36 static/style.css
--- a/static/style.css Sat Mar 10 13:54:14 2012 +0100
+++ b/static/style.css Sat Mar 10 16:57:49 2012 +0100
@@ -158,9 +158,7 @@
background-image: -webkit-gradient(linear, left top, left bottom,
color-stop(0%, #888), color-stop(25%,#333)
);
- color: #fff;
font-size: 90%;
- line-height: 200%;
padding-left: 1%;
box-shadow: #aaa 0 0 5px;
overflow: hidden;
@@ -174,6 +172,7 @@
.topbar a {
color: #eee;
+ line-height: 30px;
}
.topbar a:hover {
@@ -200,6 +199,10 @@
display: inline;
}
+.topbar .member_info {
+ float: right;
+}
+
.searchbox {
margin: 0;
padding: 0.1ex 1em 0ex 1em;
@@ -543,9 +546,8 @@
*/
.ui_tabs_links {
- margin-top: 3ex;
+ margin-top: 2ex;
margin-bottom: 1ex;
- font-size: 75%;
}
.ui_tabs_links a {
@@ -566,7 +568,6 @@
background-color: #444;
color: #fff;
text-decoration: none;
- padding: 1ex;
}
.ui_tabs_links a.yellow {
@@ -616,7 +617,8 @@
color: #777;
margin-top: 0.5ex;
margin-bottom: 0.5ex;
- font-size: 75%;
+ font-size: 90%;
+ font-weight: bold;
float: left;
line-height: 200%;
margin-right: 2em;
@@ -942,6 +944,25 @@
}
/*************************************************************************
+ * Events
+ */
+
+.events .date {
+ font-size: 150%;
+ font-weight: bold;
+ margin-top: 2ex;
+ line-height: 150%;
+}
+
+.event_list .event div {
+}
+
+.event_list .event .member_id {
+ float: right;
+}
+
+
+/*************************************************************************
* Issues
*/
@@ -978,14 +999,29 @@
background-image: -ms-linear-gradient(top, #dfeaff 0%, #fcfcfc 66%);
}
+.event_list .event .issue_id,
.issues .issue .issue_info .issue_id {
font-size: 125%;
}
+.issues .issue .suggestion {
+ margin-left: 1ex;
+ margin-bottom: 1ex;
+ font-weight: bold;
+}
+
.issue_policy_info {
font-style: italic;
}
+.issue_policy_info .event_name {
+ font-weight: bold;
+}
+
+.issue_policy_info img {
+ vertical-align: middle;
+}
+
.issues .issue .interest_by_delegation {
float: right;
}