X-Git-Url: https://projects.mako.cc/source/selectricity/blobdiff_plain/1660465f3e072cbddc19b19f7f8869affb0694c5..dc7d60a0de460c72d292b43616eb97a8b34741c8:/app/controllers/elections_controller.rb diff --git a/app/controllers/elections_controller.rb b/app/controllers/elections_controller.rb index 2b1f282..4cb72bc 100644 --- a/app/controllers/elections_controller.rb +++ b/app/controllers/elections_controller.rb @@ -1,4 +1,8 @@ class ElectionsController < ApplicationController + model :raw_voter_list, :voter, :vote, :candidate + + ## general methods for dealing with elections + #################################################################### def index list render :action => 'list' @@ -8,6 +12,10 @@ class ElectionsController < ApplicationController @election_pages, @elections = paginate :elections, :per_page => 10 end + ## methods for displaying, creating, + ## and manipulating election overview data + #################################################################### + def show @election = Election.find(params[:id]) end @@ -15,6 +23,10 @@ class ElectionsController < ApplicationController def new @election = Election.new end + + def edit + @election = Election.find(params[:id]) + end def create_election @election = Election.new(params[:election]) @@ -26,6 +38,24 @@ class ElectionsController < ApplicationController end 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 destroy + election = Election.find(params[:id]).destroy + redirect_to :action => 'list' + end + + # methods fod display, adding, deleting, and manipulating candidate + # information for elections + #################################################################### def new_candidates @election = Election.find( params[:id] ) end @@ -44,30 +74,104 @@ class ElectionsController < ApplicationController candidate.destroy end - def edit - @election = Election.find(params[:id]) + def edit_candidates + @election = Election.find( params[:id] ) end - def edit_candidates + ## 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 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' + 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 + breakpoint + @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 - def destroy - election = Election.find(params[:id]).destroy - redirect_to :action => 'list' + @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