/* * protected void ListCandidates_SelectedIndexChanged(object sender, EventArgs e) * { * if (this.ListCandidates.SelectedIndex >= 0) * { * int candidateId = Int32.Parse(this.ListCandidates.SelectedValue); * * FocusOnCandidate(candidateId); * } * } * * protected void ListVote_SelectedIndexChanged(object sender, EventArgs e) * { * if (this.ListVote.SelectedIndex >= 0) * { * int candidateId = Int32.Parse(this.ListVote.SelectedValue); * * FocusOnCandidate(candidateId); * } * }*/ /* * private void FocusOnCandidate(int candidateId) * { * MeetingElectionCandidate candidate = MeetingElectionCandidate.FromIdentity(candidateId); * * this.LiteralSelectedCandidatePhoto.Text = * "<img src=\"http://data.piratpartiet.se/Handlers/DisplayPortrait.aspx?YSize=320&PersonId=" + * candidate.PersonId.ToString() + "\" />"; * * this.LabelSelectedCandidateStatement.Text = candidate.CandidacyStatement; * }*/ protected void ListCandidates_ItemCreated(object sender, Telerik.Web.UI.RadListBoxItemEventArgs e) { if (e == null) { return; } string itemValue = e.Item.Value; if (itemValue.Length < 1) { return; } int identity = Int32.Parse(itemValue); MeetingElectionCandidate candidate = MeetingElectionCandidate.FromIdentity(identity); /* * if (candidate == null) * { * return; * } * * Label label = (Label) e.Item.FindControl("LabelCandidate"); * label.Text = candidate.Person.Canonical;*/ }
public void PopulateLists(MeetingElection poll, string verificationCode) { MeetingElectionCandidates candidates = poll.Candidates; Dictionary <int, bool> lookup = new Dictionary <int, bool>(); if (!string.IsNullOrEmpty(verificationCode)) { MeetingElectionVote vote = MeetingElectionVote.FromVerificationCode(verificationCode); if (poll.Identity != vote.InternalPollId) { throw new ArgumentException("Verification Code does not exist or does not match Poll Identity"); } int[] candidateIds = vote.SelectedCandidateIdsInOrder; foreach (int candidateId in candidateIds) { lookup[candidateId] = true; MeetingElectionCandidate candidate = MeetingElectionCandidate.FromIdentity(candidateId); this.ListVote.Items.Add(new RadListBoxItem(candidate.Person.Canonical, candidate.Identity.ToString())); } } foreach (MeetingElectionCandidate candidate in candidates) { if (!lookup.ContainsKey(candidate.Identity)) { this.ListCandidates.Items.Add(new RadListBoxItem(candidate.Person.Canonical, candidate.Identity.ToString())); } } this.ListCandidates.DataBind(); }
private void AssembleFinalOrder() { Console.WriteLine("Assembling final list."); MeetingElectionCandidates result = new MeetingElectionCandidates(); Dictionary <int, bool> candidateAdded = new Dictionary <int, bool>(); int candidatesRemaining = this.candidateIds.Count; int count = 1; while (candidatesRemaining > 0) { Console.Write("\r - remaining: {0:D4}", candidatesRemaining); // Find the first nontaken candidate int winningCandidateIndex = 0; while (candidateAdded.ContainsKey(winningCandidateIndex)) { winningCandidateIndex++; } // Iterate over all linkStrength[X,*] and [*,X]; this candidate is only a winner if // all [X,*] are >= all [*,X]. bool allSuperior = false; while (!allSuperior) { allSuperior = true; for (int compareCandidateIndex = 0; compareCandidateIndex < this.candidateIds.Count; compareCandidateIndex++) { if (candidateAdded.ContainsKey(compareCandidateIndex)) { continue; } if (this.linkStrengthXtoY[winningCandidateIndex, compareCandidateIndex] < this.linkStrengthXtoY[compareCandidateIndex, winningCandidateIndex]) { // the compareCandidateIndex had a greater link strength, so jump there and take it as // a new potential winner, restarting the comparison winningCandidateIndex = compareCandidateIndex; allSuperior = false; break; } } } // We have the winning candidate among the not-yet-ranked candidates: MeetingElectionCandidate candidate = MeetingElectionCandidate.FromIdentity(this.candidateIds[winningCandidateIndex]); candidateAdded[winningCandidateIndex] = true; result.Add(candidate); candidatesRemaining--; count++; } FinalOrder = result; Console.WriteLine(", done."); }
protected void ButtonVote_Click(object sender, EventArgs e) { MeetingElection poll = MeetingElection.FromIdentity(Int32.Parse(Request.QueryString["PollId"])); if (!poll.VotingOpen) { ScriptManager.RegisterStartupScript(this, Page.GetType(), "nope", "alert ('This poll has closed. You can not cast the vote.');", true); return; } if (this.ListVote.Items.Count == 0) { ScriptManager.RegisterStartupScript(this, Page.GetType(), "nope", "alert ('You need to pick one or more candidates in order to cast a vote.');", true); return; } if (this.ListVote.Items.Count > poll.MaxVoteLength) { ScriptManager.RegisterStartupScript(this, Page.GetType(), "nope", "alert ('You have chosen too many candidates. The maximum number is " + poll.MaxVoteLength.ToString() + ". Please remove at least " + (this.ListVote.Items.Count - poll.MaxVoteLength).ToString() + ".');", true); return; } string verificationCode = Request.QueryString["VerificationCode"]; InternalPollVoterStatus voterStatus = poll.GetVoterStatus(_currentUser); if (voterStatus == InternalPollVoterStatus.CanVote || (!string.IsNullOrEmpty(verificationCode) && voterStatus == InternalPollVoterStatus.HasAlreadyVoted)) { this.PanelPollIntro.Visible = false; this.PanelVoting.Visible = false; this.PanelComplete.Visible = true; this.PanelCode.Visible = true; MeetingElectionVote vote = null; if (string.IsNullOrEmpty(verificationCode) && voterStatus == InternalPollVoterStatus.CanVote) { vote = poll.CreateVote(_currentUser, Request.UserHostAddress.ToString()); } else { vote = MeetingElectionVote.FromVerificationCode(verificationCode); vote.Clear(); } this.LabelReference.Text = vote.VerificationCode; for (int index = 0; index < this.ListVote.Items.Count; index++) { MeetingElectionCandidate candidate = MeetingElectionCandidate.FromIdentity(Int32.Parse(this.ListVote.Items[index].Value)); vote.AddDetail(index + 1, candidate); } } }