X-Git-Url: https://projects.mako.cc/source/selectricity/blobdiff_plain/936d687077455711e0c5031f0244cc873f225658..5a8b533b5abec8dc24674e4ef084b0b9779da8af:/app/controllers/elections_controller.rb diff --git a/app/controllers/elections_controller.rb b/app/controllers/elections_controller.rb index 2b1f282..696028e 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,8 @@ 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 +21,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 +36,23 @@ 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 +71,60 @@ 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' - end + def delete_voter + voter = Voter.find( params[:id] ) + voter.destroy end + + private - def destroy - election = Election.find(params[:id]).destroy - redirect_to :action => 'list' - end + 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 end