public static function post(\election\Resource\Student $student) { $request = \Server::getCurrentRequest(); // Vote is for the current logged student only. We do not depend on the post. $election = Election::getCurrent(); $election_id = $election['id']; $election_id_match = $request->getVar('electionId'); if ($election_id_match != $election_id) { throw new \Exception('Election id does not match current election'); } // need to start a transaction here $db = \Database::getDB(); $db->begin(true); if ($request->isVar('single')) { $single_result = $request->getVar('single'); self::saveSingleResult($election_id, $single_result, $student); } if ($request->isVar('multiple')) { $multiple_result = $request->getVar('multiple'); self::saveMultipleResult($election_id, $multiple_result, $student); } if ($request->isVar('referendum')) { $referendum_result = $request->getVar('referendum'); self::saveReferendumResult($election_id, $referendum_result, $student); } self::complete($election_id, $student->getBannerId()); $db->commit(); self::emailStudent($student, $election); $json['surveyLink'] = \PHPWS_Settings::get('election', 'surveyLink'); $json['supportLink'] = \PHPWS_Settings::get('election', 'surveyLink'); $json['success'] = true; return $json; }