+
+ ## Returns information regarding all the candidates in a QuickVote
+ ## Takes in a QuickVote name, and returns the list of names and ID's of candidates
+ ## This can be useful for presenting the user with a list of readable names, while
+ ## the software sends results to us in the numeric ID's we require. The two lists are in
+ ## respective order.
+ def get_quickvote_candidate_map(shortname)
+ qv=QuickVote.ident_to_quickvote(shortname)
+ result=QuickVoteCandidateMap.new
+ unless qv
+ raise ArgumentError.new("No quickvote with name #{shortname} found!")
+ end
+ candidates={}
+ qv.candidates.each {|c| candidates[c.id] = c.name}
+ result.candidate_ids=candidates.keys
+ result.candidate_names=candidates.values
+ result
+ end
+
+ ## Get information on all the votes cast in a QuickVote
+ ## Takes in the name of a QuickVote, returns an array of QuickVoterInfo structures.
+ def get_quickvote_votes(shortname)
+ qv = QuickVote.ident_to_quickvote(shortname)
+
+ unless qv
+ raise ArgumentError.new("Cannot find QuickVote #{shortname}")
+ end
+
+ qv.votes.collect do |vote|
+ QuickVoterInfo.new(:voter_id => vote.voter.id,
+ :voter_ipaddress => vote.voter.ipaddress,
+ :vote_time => vote.time.to_i,
+ :vote => vote.votes,
+ :voter_session_id => vote.voter.session_id)
+ end
+ end
+
+ ## Gets a list of all QuickVotes in the system.
+ def list_quickvotes()
+ QuickVote.find(:all).collect do |election|
+ get_quickvote(election.name)
+ end
+ end
+
+ ## Gets information on a particular QuickVote
+ ## Takes in a QuickVote name
+ def get_quickvote(shortname)
+ unless election = QuickVote.ident_to_quickvote(shortname)
+ raise ArgumentError.new("Cannot find QuickVote named #{shortname}")
+ end
+
+ QuickVoteStruct.new(
+ :id => election.id,
+ :name => election.name,
+ :description => election.description,
+ :candidate_ids => election.candidates.collect {|c| c.id },
+ :candidate_names => election.candidates.collect {|c| c.name } )
+ end
+
+ ## Create a QuickVote
+ ## Pass in a QuickVoteStruct populated with all the fields but the candidate ID's
+ ## Any candidate ID's you fill in will be ignored anyway.
+ def create_quickvote(election)
+ qv = QuickVote.new(:name => election.name,
+ :description => election.description)
+ qv.candidate_names = election.candidate_names
+
+ if qv.save
+ return ""
+ else
+ raise ArgumentError.new("Saving quickvote FAILED:"+qv.errors.inspect)
+ end
+ end
+