Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pragma solidity ^0.4.23;
- import "github.com/Arachnid/solidity-stringutils/strings.sol";
- contract Polling{
- using strings for *;
- struct Event{
- string name;
- mapping(uint => Options) options;
- uint optionsCount;
- mapping(address => bool) hasVoted;
- }
- mapping(uint => Event) public events;
- uint public eventCount;
- struct Options{
- string name;
- uint vote;
- }
- constructor() public{
- }
- function addEvent(string _name, string _options) public{
- eventCount++;
- events[eventCount].name=_name;
- strings.slice memory s = _options.toSlice();
- strings.slice memory delim = "-".toSlice();
- string[] memory parts = new string[](s.count(delim)+1);
- for(uint i = 0; i < parts.length; i++) {
- parts[i] = s.split(delim).toString();
- events[eventCount].options[i].name=parts[i];
- events[eventCount].optionsCount++;
- }
- }
- function getOptions(uint id) public returns(string categories){
- categories=string(abi.encodePacked(events[id].options[0].name));
- for(uint i=1;i<events[id].optionsCount;i++){
- categories=string(abi.encodePacked(categories,",",events[id].options[i].name));
- }
- }
- function vote(uint _eventId,uint _optionId) public{
- require(!events[_eventId].hasVoted[msg.sender]);
- events[_eventId].options[_optionId].vote++;
- events[_eventId].hasVoted[msg.sender]=true;
- }
- function seeVotes(uint eventId,uint optionId) public returns (uint num){
- num = events[eventId].options[optionId].vote;
- }
- function flashResult(uint _eventId) public returns(string winnerName,uint value){
- winnerName=events[_eventId].options[0].name;
- value=events[_eventId].options[0].vote;
- for(uint i=1;i<events[_eventId].optionsCount;i++){
- if(events[_eventId].options[i].vote>value){
- value=events[_eventId].options[i].vote;
- winnerName=events[_eventId].options[i].name;
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment