Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ###########################
- layout.html:
- ###########################
- <someplace>
- {{=LOAD('voting', 'voting_viewlet', ajax=False)[0][0]}}
- </someplace>
- ###########################
- voting.py:
- ###########################
- def voting_viewlet():
- if not session.has_key('finished_votings'):
- session.finished_votings = {}
- if request.vars.vote:
- active_voting = db((db.voting.id==session['active_voting'])&(db.voting.status=='opened')).select().first()
- if active_voting and active_voting.id not in session.get('finished_votings', []):
- answers = db(db.voting_answers.voting_id==active_voting.id).select()
- show_results = False
- if active_voting.multi:
- answerlist = []
- tmp = makelist(request.vars.answer)
- for i in tmp:
- answerlist.append(int(i))
- valide_answers = list(set(get_ids(answers)) & set(answerlist))
- if valide_answers:
- db(db.voting_answers.id.belongs(valide_answers)).update(count=db.voting_answers.count+1)
- try:
- session['finished_votings'].append(active_voting.id)
- except:
- session['finished_votings']=[active_voting.id]
- show_results = True
- else:
- if request.vars.answer:
- answer = int(request.vars.answer)
- if answer in get_ids(answers):
- db(db.voting_answers.id==answer).update(count=db.voting_answers.count+1)
- try:
- session['finished_votings'].append(active_voting.id)
- except:
- session['finished_votings']=[active_voting.id]
- show_results = True
- if show_results:
- voting = db(db.voting.id==active_voting.id).select().first() or redirect(URL('default','index'))
- answers = db(db.voting_answers.voting_id==voting.id).select(orderby=~db.voting_answers.count)
- count = 0
- if answers:
- max = answers.first().count
- for answer in answers:
- count += answer.count
- for answer in answers:
- if count > 0:
- answer.percent = int(float(answer.count)*100/count)
- answer.width = int(float(answer.count)*100/max)
- answer.color = getColor()
- else:
- answer.percent = 0
- answer.width = 0
- answer.color = getColor()
- return response.render('voting/voting_viewlet_results.html', dict(voting=voting, answers=answers, count=count))
- votings = db(db.voting.status=='opened').select()
- finished_votings = session.get('finished_votings',[])
- unfinished_votings = []
- for voting in votings:
- if voting.id not in finished_votings:
- unfinished_votings.append(voting)
- if unfinished_votings:
- active_voting = unfinished_votings[random.randint(0, len(unfinished_votings)-1)]
- session['active_voting'] = active_voting.id
- else:
- active_voting = None
- session['active_voting'] = None
- if active_voting:
- answers = db(db.voting_answers.voting_id==active_voting.id).select(orderby=db.voting_answers.id)
- else:
- answers = []
- return dict(active_voting=active_voting, answers=answers)
- ###########################
- views/voting/voting_viewlet.html:
- ###########################
- {{if active_voting:}}
- <div class="voting_viewlet">
- <form method="POST">
- <div class="title">Voting</div>
- <div class="question">{{=active_voting.question}}</div>
- {{if active_voting.multi:}}
- {{for answer in answers:}}
- <div class="control"><input type="checkbox" name="answer" value="{{=answer.id}}"></div>
- <div class="answer">{{=answer.answer}}</div>
- <div class="clear"></div>
- {{pass}}
- {{else:}}
- {{for answer in answers:}}
- <div class="control"><input type="radio" name="answer" value="{{=answer.id}}"></div>
- <div class="answer">{{=answer.answer}}</div>
- <div class="clear"></div>
- {{pass}}
- {{pass}}
- <div class="formbuttons">
- <input class="formbutton" type="submit" value="vote" name="vote"/>
- </div>
- </form>
- </div>
- {{pass}}
- ###########################
- views/voting/voting_viewlet_results.html:
- ###########################
- {{if voting:}}
- <div class="voting_viewlet results">
- <div class="title">Voting results</div>
- <div class="question">{{=voting.question}}</div>
- {{for answer in answers:}}
- <div class="voting_answer mt4">{{=answer.answer}}</div>
- <div class="voting_bar" style="background:{{=answer.color}};width:{{=answer.width}}px;"></div>
- <div class="voting_info">{{=answer.count}} ({{=answer.percent}}%)</div>
- <div class="clear"></div>
- {{pass}}
- <div class="votecount">votes: {{=count}}</div>
- </div>
- {{pass}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement