. */ error_reporting(E_ALL); include("./include/include.php"); require_once(FILESYSTEMROOTPATH."jc/include/classes/DefaultLayout.php"); require_once(FILESYSTEMROOTPATH."jc/include/classes/MyCheckboxField.php"); require_once(FILESYSTEMROOTPATH."jc/include/classes/AbstractForm3.php"); //require_once(FILESYSTEMROOTPATH."include/form/AbstractForm.php"); /** * Helper classes */ class RankedVoteBallotForm extends AbstractForm3 { private $Options; public function __construct(Layout $layout, IModel $model, $Options) { parent::__construct($layout, $model, 'form', array('Vote'), 'true'); $this->Options = $Options; } public function save(IModel $model) { $poll_id = $_POST['poll_id']; //delegate has votes? $rvbService = $GLOBALS['ClassFactory']->getRankedVoteBallotsService(); $result = $rvbService->getMyVotes($_SESSION['sess_uid'], $model->getRankedVote_id()); if ($result['my_votes'] <= 0){ $this->layout->echoln('
You have no more votes left!
'); return; } //save an empty vote to take the ticket. $ticket = $rvbService->getTicket($poll_id, $_POST['bodyCode'], $_POST['delegate']); $ranking = $_POST["ranking"]; $all_ballots = array(); foreach($this->Options as $option){ //create new ballot. $option_id = $option['id']; $rvballot = new RankedVoteBallots(''); $rvballot->setRankedVoteOption_id($option['id']); $rvballot->setRankedVote_id($poll_id); $rvballot->setRanking($ranking[$option_id]); //if not selected, then ranking = N + 1 $rvballot->setTicket($ticket); $rvballot->setBodyCode($_POST['bodyCode']); $rvballot->setDelegate($_POST['delegate']); $all_ballots[] = $rvballot; } $rvbService->saveMultiple($all_ballots); $this->layout->redirect('ranked_vote2.php?pid='.$poll_id); } } /** * End of helper classes */ $layout = new DefaultLayout(Access::BOARD, "./jc/"); $layout->init(); $layout->addJavascript('js/votes_check.js'); $ns = $GLOBALS['ClassFactory']->getNotificationsService(); //get id if set if (isset($_GET['pid'])){ $poll_id = $_GET['pid']; $poll = $GLOBALS['ClassFactory']->getRankedVoteService()->load($poll_id); $ns->seen($poll_id,'RankedVote'); unset($_SESSION['JC_MODULE']['Notifications']); } else{ $layout->redirect('ranked_vote1.php'); } if (date("Y-m-d H:i:s") > $poll->getClose()){ $layout->echoln('Ranked Voting has closed!'); $layout->echoln('
Back'); $layout->page_footer(); exit(); }elseif (date("Y-m-d H:i:s") < $poll->getOpen()){ $layout->echoln('Ranked Voting has not opened yet!'); $layout->echoln('
Back'); $layout->page_footer(); exit(); } $rvbService = $GLOBALS['ClassFactory']->getRankedVoteBallotsService(); $registered = $rvbService->isRegistered($_SESSION['sess_uid']); if($registered == false){ $layout->echoln('You have not been registered!'); $layout->page_footer(); exit(0); } $result = $rvbService->getMyVotes($_SESSION['sess_uid'], $poll_id); if (isset($result["error"])){ $layout->echoln($result["error"]); $layout->page_footer(); exit(0); } $votesLeft = $result['my_votes']; $cast = $result['votes_cast']; $local_delegates = $result['local_delegates']; $local_votes = $result['local_votes']; $local_votes_cast = $result['local_votes_cast']; $myBodyCode = $_SESSION['JC_MODULE']['BodyCode']; $myBodyName = $_SESSION['JC_MODULE']['BodyName']; if (empty($_POST)){ $layout->echoln('

'.$myBodyName.' has '.$local_votes.' votes and '.$local_delegates.' delegate(s).
'); if( $local_votes%$local_delegates==0 ) $layout->echoln('Each delegate can cast '.$local_votes/$local_delegates.' vote(s)

'); elseif( $local_votes%$local_delegates==1 ) $layout->echoln('Since '.$local_votes.' votes cannot be equally distributed to '.$local_delegates.' delegates, 1 delegate can cast 1 vote more than the other 2 delegates.

'); elseif( $local_votes%$local_delegates==2 ) $layout->echoln('Since '.$local_votes.' votes cannot be equally distributed to '.$local_delegates.' delegates, 2 delegates can cast 1 vote more than the 3rd delegate.

'); } $layout->echoln('

Voting for: '.$poll->getTitle().'

'); if (empty($_POST)){ $layout->echoln('

'.$myBodyName.' has already cast: '.$local_votes_cast.' vote(s). You have already cast: '.$cast.' vote(s).
'); $layout->echoln('Maximum amount of votes you can still cast: '.$votesLeft.' vote(s)

'); } //delegate has votes? if ($votesLeft > 0){ //list of candidates $pollOptions = $GLOBALS['ClassFactory']->getRankedVoteOptionsService()->loadbyRankedVote($poll_id); if (empty($_POST)){ $layout->echoln('
You can rank the options:
'); } $rvballot = new RankedVoteBallots(''); $rvballot->setRankedVote_id($poll_id); $N = count($pollOptions); $choices = array(); for($i = 1; $i <= $N; $i++){ //1-based index $choices[$i] = $i; } $choices[$N + 1] = '-'; $form = new RankedVoteBallotForm($layout, $rvballot, $pollOptions); foreach ($pollOptions as $pollOption){ //select field does not use title! -> mySelectField or fix it $pob = new SelectField("ranking[{$pollOption["id"]}]", $pollOption['rankedVoteOption'], $choices); $pob->setValue($N + 1); //$pob = new SelectField('a', 'b', $choices); // 'a' must be a field of rvballot object! -> we need C objects $form->addField($pob); } $hf1 = new HiddenField('bodyCode', $myBodyCode); $form->addHiddenField($hf1); $hf2 = new HiddenField('poll_id', $poll_id); $form->addHiddenField($hf2); $hf3 = new HiddenField('delegate', $_SESSION['sess_uid']); $form->addHiddenField($hf3); $form->display(); } else{ $layout->echoln('
You have no more votes left!
'); } $layout->page_footer(); ?>