Beispiel #1
0
  def showResults(self):
    if (not 'poll_id' in request.params):
      redirect(url(controller='poll', action='showAll'))

    try:
      poll = Session.query(Poll).filter(Poll.owner == self.uid).filter(Poll.id == request.params['poll_id']).one()
      c.poll = poll
      votes = {}
      votes['missing'] = 0

      if poll.type == 'yesno' or poll.type == 'yesnonull':
        for v in poll.votes:
          if v.simple_vote is None:
            votes['missing'] += 1
          elif not v.simple_vote in votes:
            votes[v.simple_vote] = 1
          else:
            votes[v.simple_vote] += 1
      else:
        for v in poll.votes:
          if v.complex_vote is None:
            votes['missing'] += 1
          else:
            votes[v.complex_vote] = 1

      c.votes = votes
      
      return render('/vote/showResults.mako')
    except Exception as e:
      print e
      pass

    redirect(url(controller='poll', action='showAll'))
Beispiel #2
0
  def results(self):
    if not 'vote_key' in request.params or request.params['vote_key'] == '':
      return render('/vote/results.mako')
    else:
      try:
        vote = Session.query(Vote).filter(Vote.key == request.params['vote_key']).one()
        poll = Session.query(Poll).filter(Poll.id == vote.poll_id).one()

        if vote.update_date is None:
          session['flash'] = _('Vote first')
          session['flash_class'] = 'error'
          session.save()
          redirect(url(controller='vote', action='vote'))

        c.poll = poll
        votes = {}
        votes['missing'] = 0

        if poll.type == 'yesno' or poll.type == 'yesnonull':
          for v in poll.votes:
            if v.simple_vote is None:
              votes['missing'] += 1
            elif not v.simple_vote in votes:
              votes[v.simple_vote] = 1
            else:
              votes[v.simple_vote] += 1

        else:
          for v in poll.votes:
            if v.complex_vote is None:
              votes['missing'] += 1
            else:
              votes[v.complex_vote] = 1

        c.votes = votes

        return render('/vote/showResults.mako')
      except Exception as e:
        print e
        raise e
        pass

      return render('/vote/results.mako')
Beispiel #3
0
  def doVote(self):
    if not 'vote_key' in request.params or request.params['vote_key'] == '' or\
      not 'vote' in request.params or request.params['vote'] == '':
      redirect(url(controller='vote', action='vote'))
    else:
      try:
        vote = Session.query(Vote).filter(Vote.key == request.params['vote_key']).one()
        poll = Session.query(Poll).filter(Poll.id == vote.poll_id).one()

        if not vote.update_date is None:
          redirect(url(controller='vote', action='vote'))

        if datetime.now() > poll.expiration_date:
          session['flash'] = _('Sorry, poll has expired')
          session['flash_class'] = 'error'
          session.save()
          redirect(url(controller='vote', action='vote'))

        if poll.type == 'yesno' and (request.params['vote'] == 'yes' or request.params['vote'] == 'no'):
          vote.simple_vote = request.params['vote']
        elif poll.type == 'yesnonull' and (request.params['vote'] == 'yes' or request.params['vote'] == 'no' or request.params['vote'] == 'null'):
          vote.simple_vote = request.params['vote']
        elif poll.type == 'complex':
          vote.complex_vote = request.params['vote']
        else:
          redirect(url(controller='vote', action='vote'))

        vote.update_date = datetime.now()
        Session.commit()

        session['flash'] = _('Vote successfully saved')
        session.save()
      except Exception as e:
        print e
        session['flash'] = _('Failed to save vote')
        session['flash_class'] = 'error'
        session.save()
        pass

    redirect(url(controller='vote', action='vote'))
Beispiel #4
0
  def vote(self):
    if 'vote_key' in request.params and not request.params['vote_key'] == '':
      try:
        vote = Session.query(Vote).filter(Vote.key == request.params['vote_key']).one()
        poll = Session.query(Poll).filter(Poll.id == vote.poll_id).one()

        if datetime.now() > poll.expiration_date:
          session['flash'] = _('Sorry, poll has expired')
          session['flash_class'] = 'error'
          session.save()
          redirect(url(controller='vote', action='vote'))

        if vote.update_date is None:
          c.poll = Session.query(Poll).filter(Poll.id == vote.poll_id).one()
          c.vote_key = request.params['vote_key']

          return render('/vote/dovote.mako')
      except Exception as e:
        import sys, traceback
        traceback.print_exc(file=sys.stdout)
        pass

    return render('/vote/vote.mako')
Beispiel #5
0
  def showAll(self):
    c.heading = _('All polls')
    c.polls = []

    try:
      polls = Session.query(Poll).filter(Poll.owner == self.uid).all()

      for s in polls:
        try:
          s.name = s.name.encode('ascii','ignore')
        except:
          s.name ='poo...frickin P000000'

        c.polls.append(s)
    except NoResultFound:
      print 'No such poll'

    return render('/poll/showAll.mako')
Beispiel #6
0
  def deletePoll(self):
    if (not 'poll_id' in request.params):
      redirect(url(controller='poll', action='showAll'))

    try:
      poll = Session.query(Poll).filter(Poll.owner == self.uid).filter(Poll.id == request.params['poll_id']).one()
      Session.query(Vote).filter(Vote.poll_id == poll.id).delete()

      Session.delete(poll)
      Session.commit()
      session['flash'] = _('Poll successfully deleted')
      session.save()
    except Exception as e:
      print e
      session['flash'] = _('Failed to delete poll')
      session['flash_class'] = 'error'
      session.save()

    redirect(url(controller='poll', action='showAll'))
Beispiel #7
0
  def editPoll(self):
    if (not 'poll_id' in request.params):
      redirect(url(controller='poll', action='showAll'))

    try:
      poll = Session.query(Poll).filter(Poll.owner == self.uid).filter(Poll.id == request.params['poll_id']).one()

      c.heading = _('Edit poll')
      c.mode = 'edit'

      if len(poll.votes) > 0:
        session['flash'] = _('Cannot edit a running poll')
        session['flash_class'] = 'error'
        session.save()
        redirect(url(controller='poll', action='showAll'))

      c.poll = poll

      return render('/poll/edit.mako')
    except:
      pass

    redirect(url(controller='poll', action='showAll'))
Beispiel #8
0
  def doEditPoll(self):
    try:
      if request.params['mode'] == 'edit':
        poll = Session.query(Poll).filter(Poll.owner == self.uid).filter(Poll.id == request.params['poll_id']).one()
      else:
        poll = Poll()

      poll.owner = self.uid
      poll.name = request.params['name'].encode('utf8')
      poll.instructions = str(request.params['instructions'].encode('utf-8'))
      poll.expiration_date = request.params['expiration_date']
      poll.type = request.params['type']

      if request.params['public'] == 'yes':
        poll.public = True
      else:
        poll.public = False
      
      if request.params['mode'] == 'add':
        Session.add(poll)
        Session.flush()

      voters = request.params['voters'].split('\n')
      voters = list(set(voters))
      for v in voters:
        vo = None
        vo = Vote()
        vo.poll_id = poll.id
        vo.key = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(20))
        mailtext = '''\
        Hey,

        Your vote is requested for "%s".
        You can vote here:
          https://votex.hackerspace.lu:8443/vote/vote?vote_key=%s

        Your voting key is: %s

        The poll expires on %s
        ''' %\
        (poll.name, vo.key, vo.key, poll.expiration_date)

        msg = MIMEText(mailtext, 'plain')
        msg['Subject'] = 'syn2cat - We need you to vote'
        msg['From'] = '*****@*****.**'
        msg['To'] = v
        s = smtplib.SMTP('localhost')
        s.sendmail(msg['From'], v, msg.as_string())
        s.quit()

        Session.add(vo)

      Session.commit()

      session['flash'] = _('Poll successfully edited')
      session.save()

      redirect(url(controller='poll', action='showAll'))

    except LookupError:
      print 'No such user !'
      session['flash'] = _('Failed to add poll')
      session['flash_class'] = 'error'
      session.save()

    redirect(url(controller='poll', action='showAll'))