liquid_feedback_frontend

view app/main/suggestion/_action/add.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 8d91bccab0bf
children 53a45356c107
line source
1 local tmp = db:query({ "SELECT text_entries_left FROM member_contingent_left WHERE member_id = ?", app.session.member.id }, "opt_object")
2 if tmp and tmp.text_entries_left and tmp.text_entries_left < 1 then
3 slot.put_into("error", _"Sorry, you have reached your personal flood limit. Please be slower...")
4 return false
5 end
7 local name = param.get("name")
8 local name = util.trim(name)
10 if #name < 3 then
11 slot.put_into("error", _"This title is really too short!")
12 return false
13 end
15 local suggestion = Suggestion:new()
17 suggestion.author_id = app.session.member.id
18 suggestion.name = name
19 param.update(suggestion, "description", "initiative_id")
20 suggestion:save()
22 -- TODO important m1 selectors returning result _SET_!
23 local issue = suggestion.initiative:get_reference_selector("issue"):for_share():single_object_mode():exec()
25 if issue.closed then
26 slot.put_into("error", _"This issue is already closed.")
27 return false
28 elseif issue.fully_frozen then
29 slot.put_into("error", _"Voting for this issue has already begun.")
30 return false
31 end
33 local opinion = Opinion:new()
35 opinion.suggestion_id = suggestion.id
36 opinion.member_id = app.session.member.id
37 opinion.degree = param.get("degree", atom.integer)
38 opinion.fulfilled = false
40 opinion:save()
42 slot.put_into("notice", _"Your suggestion has been added")

Impressum / About Us