Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.33 KB | None | 0 0
  1. ###########################
  2. layout.html:
  3. ###########################
  4. <someplace>
  5.     {{=LOAD('voting', 'voting_viewlet', ajax=False)[0][0]}}
  6. </someplace>
  7.  
  8.  
  9.  
  10. ###########################
  11. voting.py:
  12. ###########################
  13. def voting_viewlet():
  14.     if not session.has_key('finished_votings'):
  15.         session.finished_votings = {}
  16.     if request.vars.vote:
  17.         active_voting = db((db.voting.id==session['active_voting'])&(db.voting.status=='opened')).select().first()
  18.         if active_voting and active_voting.id not in session.get('finished_votings', []):
  19.             answers = db(db.voting_answers.voting_id==active_voting.id).select()
  20.             show_results = False
  21.             if active_voting.multi:
  22.                 answerlist = []
  23.                 tmp = makelist(request.vars.answer)
  24.                 for i in tmp:
  25.                     answerlist.append(int(i))
  26.                 valide_answers = list(set(get_ids(answers)) & set(answerlist))
  27.                 if valide_answers:
  28.                     db(db.voting_answers.id.belongs(valide_answers)).update(count=db.voting_answers.count+1)
  29.                     try:
  30.                         session['finished_votings'].append(active_voting.id)
  31.                     except:
  32.                         session['finished_votings']=[active_voting.id]
  33.                     show_results = True
  34.             else:
  35.                 if request.vars.answer:
  36.                     answer = int(request.vars.answer)
  37.                     if answer in get_ids(answers):
  38.                         db(db.voting_answers.id==answer).update(count=db.voting_answers.count+1)
  39.                         try:
  40.                             session['finished_votings'].append(active_voting.id)
  41.                         except:
  42.                             session['finished_votings']=[active_voting.id]
  43.                         show_results = True
  44.             if show_results:
  45.                 voting = db(db.voting.id==active_voting.id).select().first() or redirect(URL('default','index'))
  46.                 answers = db(db.voting_answers.voting_id==voting.id).select(orderby=~db.voting_answers.count)
  47.                 count = 0
  48.                 if answers:
  49.                     max = answers.first().count
  50.                     for answer in answers:
  51.                         count += answer.count
  52.                     for answer in answers:
  53.                         if count > 0:
  54.                             answer.percent = int(float(answer.count)*100/count)
  55.                             answer.width = int(float(answer.count)*100/max)
  56.                             answer.color = getColor()
  57.                         else:
  58.                             answer.percent = 0
  59.                             answer.width = 0
  60.                             answer.color = getColor()
  61.                 return response.render('voting/voting_viewlet_results.html', dict(voting=voting, answers=answers, count=count))
  62.  
  63.     votings = db(db.voting.status=='opened').select()
  64.     finished_votings = session.get('finished_votings',[])
  65.     unfinished_votings = []
  66.     for voting in votings:
  67.         if voting.id not in finished_votings:
  68.             unfinished_votings.append(voting)
  69.     if unfinished_votings:
  70.         active_voting = unfinished_votings[random.randint(0, len(unfinished_votings)-1)]
  71.         session['active_voting'] = active_voting.id
  72.     else:
  73.         active_voting = None
  74.         session['active_voting'] = None
  75.  
  76.     if active_voting:
  77.         answers = db(db.voting_answers.voting_id==active_voting.id).select(orderby=db.voting_answers.id)
  78.     else:
  79.         answers = []
  80.     return dict(active_voting=active_voting, answers=answers)
  81.  
  82.  
  83. ###########################
  84. views/voting/voting_viewlet.html:
  85. ###########################
  86. {{if active_voting:}}
  87.     <div class="voting_viewlet">
  88.     <form method="POST">
  89.         <div class="title">Voting</div>
  90.         <div class="question">{{=active_voting.question}}</div>
  91.         {{if active_voting.multi:}}
  92.             {{for answer in answers:}}
  93.                 <div class="control"><input type="checkbox" name="answer" value="{{=answer.id}}"></div>
  94.                 <div class="answer">{{=answer.answer}}</div>
  95.                 <div class="clear"></div>
  96.             {{pass}}
  97.         {{else:}}
  98.             {{for answer in answers:}}
  99.                 <div class="control"><input type="radio" name="answer" value="{{=answer.id}}"></div>
  100.                 <div class="answer">{{=answer.answer}}</div>
  101.                 <div class="clear"></div>
  102.             {{pass}}
  103.         {{pass}}
  104.         <div class="formbuttons">
  105.             <input class="formbutton" type="submit" value="vote" name="vote"/>
  106.         </div>
  107.     </form>
  108.     </div>
  109. {{pass}}
  110.  
  111.  
  112. ###########################
  113. views/voting/voting_viewlet_results.html:
  114. ###########################
  115. {{if voting:}}
  116.     <div class="voting_viewlet results">
  117.         <div class="title">Voting results</div>
  118.         <div class="question">{{=voting.question}}</div>
  119.         {{for answer in answers:}}
  120.         <div class="voting_answer mt4">{{=answer.answer}}</div>
  121.             <div class="voting_bar" style="background:{{=answer.color}};width:{{=answer.width}}px;"></div>
  122.             <div class="voting_info">{{=answer.count}} ({{=answer.percent}}%)</div>
  123.         <div class="clear"></div>
  124.         {{pass}}
  125.         <div class="votecount">votes: {{=count}}</div>
  126.     </div>
  127. {{pass}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement