liquid_feedback_frontend

view app/main/initiative/_action/revoke.lua @ 19:00d1004545f1

Dynamic interface using XMLHttpRequests, and many other changes

Bugfixes:
- Only allow voting on admitted initiatives
- Repaired issue search
- Don't display delegations for closed issues on member page
- Don't show revoke link in initiative, when issue is already half_frozen
- Localization for voting JavaScript
- Display author of suggestions

Disclosure of voting data after voting is finished:
- Possibility to inspect every ballot including preferences
- Show number of voters preferring one initiative to another initiative

Interface behaviour changes:
- Reversed default order of drafts
- Default order of suggestions changed
- Show new drafts of initiatives only once per day in timeline

Accessibility:
- Barrier-free voting implemented
- POST links are now accessible without JavaScript
- Changed gray for unsatisfied supporters in bar graph to a lighter gray

Other interface improvements:
- Optical enhancements
- Dynamic interface using XMLHttpRequests
- Show usage terms in about section
- Show own membership in area listing
- Show uninformed supporters greyed out and marked with yellow question mark
- Warning box in non-admitted initiatives
- When voted, don't display voting notice and change label of voting link
- Show object counts in more tabulator heads
- Enlarged member statement input field

Miscellaneous:
- Code cleanup
- Added README file containing installation instructions
- Use new WebMCP function ui.filters{...} instead of own ui.filter and ui.order functions
author bsw/jbe
date Sat Feb 20 22:10:31 2010 +0100 (2010-02-20)
parents 72c5e0ee7c98
children bf99dcc58f68
line source
1 local initiative = Initiative:by_id(param.get_id())
3 local initiator = Initiator:by_pk(initiative.id, app.session.member.id)
4 if not initiator or initiator.accepted ~= true then
5 error("access denied")
6 end
8 -- TODO important m1 selectors returning result _SET_!
9 local issue = initiative:get_reference_selector("issue"):for_share():single_object_mode():exec()
11 if issue.closed then
12 slot.put_into("error", _"This issue is already closed.")
13 return false
14 elseif issue.half_frozen then
15 slot.put_into("error", _"This issue is already frozen.")
16 return false
17 end
19 if initiative.revoked then
20 slot.put_into("error", _"This initiative is already revoked")
21 return false
22 end
24 local suggested_initiative_id = param.get("suggested_initiative_id", atom.integer)
26 if suggested_initiative_id ~= -1 then
27 local suggested_initiative = Initiative:by_id(suggested_initiative_id)
28 if not suggested_initiative then
29 error("object not found")
30 end
31 if initiative.id == suggested_initiative.id then
32 slot.put_into("error", _"You can't suggest the initiative you are revoking")
33 return false
34 end
35 initiative.suggested_initiative_id = suggested_initiative.id
36 end
38 if not param.get("are_you_sure", atom.boolean) then
39 slot.put_into("error", _"You have to mark 'Are you sure' to revoke!")
40 return false
41 end
43 initiative.revoked = "now"
44 initiative:save()
46 slot.put_into("notice", _"Initiative is revoked now")

Impressum / About Us