class ElectionController < ApplicationController model :raw_voter_list, :voter, :vote, :candidate layout 'vb' before_filter :login_required ## methods for displaying, creating, ## and manipulating election overview data #################################################################### def new @election = Election.new end def create_election @election = Election.new(params[:election]) # default options @election.user = session[:user] @election.anonymous = 1 @election.startdate = Time.now if @election.save flash[:notice] = 'Election was successfully created.' redirect_to :action => 'edit_candidates', :id => @election.id else render :action => 'new' end end # add filter to verify that the person working on or looking at # something is the owner def edit @election = Election.find(params[:id]) end def show @election = Election.find(params[:id]) end def update @election = Election.find(params[:id]) if @election.update_attributes(params[:election]) flash[:notice] = 'Election was successfully updated.' redirect_to :action => 'show', :id => @election else render :action => 'edit' end end def start_election @election = Election.find(params[:id]) @election.voters.each do |voter| email = VoterNotify.create_votestart(voter) render(:text => "
" + email.encoded + "") breakpoint break end #@election.activate! end # methods fod display, adding, deleting, and manipulating candidate # information for elections #################################################################### def edit_candidates @election = Election.find( params[:id] ) end def add_candidate @election = Election.find(params[:id]) @candidate = Candidate.new(params[:candidate]) if @candidate.save @election.candidates << @candidate @candidate = Candidate.new redirect_to :action => 'edit_candidates', :id => @election.id else render :action => 'edit_candidates', :id => @election.id end end def delete_candidate candidate = Candidate.find( params[:id] ) candidate.destroy end def lessinfo_candidate @show_details = false @candidate = Candidate.find( params[:id] ) render :partial => 'candidate_line' end def moreinfo_candidate @show_details = true @candidate = Candidate.find( params[:id] ) render :partial => 'candidate_line' end def edit_candidate @candidate = Candidate.find( params[:id] ) @election = @candidate.election end def update_candidate @candidate = Candidate.find(params[:id]) @election = @candidate.election if @candidate.update_attributes(params[:candidate]) redirect_to :action => 'edit_candidates', :id => @candidate.election.id else render :action => 'edit_candidate' end end def candidate_picture candidate = Candidate.find( params[:id] ) send_data( candidate.picture_data, :filename => candidate.picture_filename, :type => candidate.picture_type, :disposition => 'inline' ) end ## methods for displaying, adding, deleting, and manipulating voters ## for a particular election #################################################################### def new_voters @election = Election.find( params[:id] ) if params.has_key?[:raw_voter_list] process_incoming_voters( params[:raw_voter_list] ) end @raw_voter_list = RawVoterList.new end def edit_voters @election = Election.find( params[:id] ) if params.has_key?( :raw_voter_list ) process_incoming_voters( params[:raw_voter_list] ) end @raw_voter_list = RawVoterList.new end def delete_voter voter = Voter.find( params[:id] ) voter.destroy end ## methods for computing and printing results #################################################################### def results @election = Election.find( params[:id] ) votes = [] @election.voters.each do |voter| if voter.vote and voter.vote.confirmed? votes << voter.vote.rankings.sort.collect {|vote| vote.candidate_id} end end @voteobj = CloneproofSSDVote.new(votes) @resultobj = @voteobj.result @winners = @resultobj.winners @candidates_by_id = {} @election.candidates.each {|cand| @candidates_by_id[cand.id] = cand} end def detailed_results self.results @voter_list = [] @vote_list = [] @election.voters. each do |voter| if voter.vote and voter.vote.confirmed? @voter_list << voter.email @vote_list << voter.vote end end @vote_list.sort! @vote_list.sort! { |a,b| a.token <=> b.token } end ## private methods #################################################################### private def process_incoming_voters(raw_voter_list) incoming_voters = RawVoterList.new( raw_voter_list ) unless incoming_voters.entries.empty? incoming_voters.each do |new_voter| if incoming_voters.email == 0 new_voter.contacted = 1 elsif incoming_voters.email == 1 email_voter( new_voter ) new_voter.contacted = 1 else new_voter.contacted = 0 end # the new voter should be in good shape. save add to the election new_voter.save @election.voters << new_voter end end # reset the next time to have a the same default value for emailing @raw_voter_list = RawVoterList.new @raw_voter_list.email = incoming_voters.email end def email_voter end end