Added processing and presentatin of results.
[selectricity] / app / controllers / elections_controller.rb
index b3406a84ab64941ce8a4c05e415937aec09f4e92..4cb72bc779d29fdf7deae3f6016fabfaf005144a 100644 (file)
@@ -1,10 +1,8 @@
-require 'uniq_token'
-
 class ElectionsController < ApplicationController
   model :raw_voter_list, :voter, :vote, :candidate
 
-
-  # general methods for dealing with elections
+  ## general methods for dealing with elections
+  ####################################################################
   def index
     list
     render :action => 'list'
@@ -14,8 +12,10 @@ class ElectionsController < ApplicationController
     @election_pages, @elections = paginate :elections, :per_page => 10
   end
 
-  # methods for displaying, creating, and manipulating election overview
-  # data
+  ## methods for displaying, creating,
+  ## and manipulating election overview data
+  ####################################################################
+
   def show
     @election = Election.find(params[:id])
   end
@@ -55,6 +55,7 @@ class ElectionsController < ApplicationController
 
   # methods fod display, adding, deleting, and manipulating candidate
   # information for elections
+  ####################################################################
   def new_candidates
     @election = Election.find( params[:id] )
   end
@@ -77,8 +78,9 @@ class ElectionsController < ApplicationController
     @election = Election.find( params[:id] )
   end
 
-  # methods for displaying, adding, deleting, and manipulating voters
-  # for a particular election
+  ## 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]
@@ -102,21 +104,53 @@ class ElectionsController < ApplicationController
     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
+
+    @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 )
-      token_generator = UniqueTokenGenerator.new( 16 )
 
       unless incoming_voters.entries.empty?
         incoming_voters.each do |new_voter|
 
-         until new_voter.password and \
-               Voter.find_all( [ "password = ?", new_voter.password ]).empty?
-           new_voter.password = token_generator.token
-         end
-        
-         breakpoint
           if incoming_voters.email == 0
             new_voter.contacted = 1
          elsif incoming_voters.email == 1

Benjamin Mako Hill || Want to submit a patch?