Skip to content
Permalink
Browse files Browse the repository at this point in the history
prevent users from being able to send more than 1 poll vote
  • Loading branch information
KDSBrowne committed Oct 28, 2020
1 parent 23cd4cf commit d2cb02b
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 8 deletions.
Expand Up @@ -313,7 +313,10 @@ object Polls {
def respondToQuestion(pollId: String, questionID: Int, responseID: Int, responder: Responder, polls: Polls) {
polls.polls.get(pollId) match {
case Some(p) => {
p.respondToQuestion(questionID, responseID, responder)
if (!p._responders.exists(_ == responder)) {
p.addResponder(responder)
p.respondToQuestion(questionID, responseID, responder)
}
}
case None =>
}
Expand Down Expand Up @@ -455,6 +458,11 @@ class Poll(val id: String, val questions: Array[Question], val numRespondents: I
private var _stopped: Boolean = false
private var _showResult: Boolean = false
private var _numResponders: Int = 0
var _responders = new ArrayBuffer[Responder]()

def addResponder(responder: Responder) {
_responders += (responder)
}

def showingResult() { _showResult = true }
def showResult(): Boolean = { _showResult }
Expand Down
Expand Up @@ -8,12 +8,21 @@ export default function publishVote(pollId, pollAnswerId) {
const REDIS_CONFIG = Meteor.settings.private.redis;
const CHANNEL = REDIS_CONFIG.channels.toAkkaApps;
const EVENT_NAME = 'RespondToPollReqMsg';

const { meetingId, requesterUserId } = extractCredentials(this.userId);

check(pollAnswerId, Number);
check(pollId, String);

const waitingFor = Polls.findOne({ id: pollId }, {
feilds: {
users: 1,
},
});

const userResponded = !waitingFor.users.includes(requesterUserId);

if (userResponded) return null;

const selector = {
users: requesterUserId,
meetingId,
Expand Down Expand Up @@ -43,11 +52,11 @@ export default function publishVote(pollId, pollAnswerId) {
return Logger.error(`Removing responded user from Polls collection: ${err}`);
}

return Logger.info(`Removed responded user=${requesterUserId} from poll (meetingId: ${meetingId}, `
Logger.info(`Removed responded user=${requesterUserId} from poll (meetingId: ${meetingId}, `
+ `pollId: ${pollId}!)`);

return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload);
};

Polls.update(selector, modifier, cb);

return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload);
}
9 changes: 6 additions & 3 deletions bigbluebutton-html5/imports/ui/components/polling/service.js
@@ -1,8 +1,13 @@
import { makeCall } from '/imports/ui/services/api';
import Polls from '/imports/api/polls';
import { debounce } from 'lodash';

const MAX_CHAR_LENGTH = 5;

const handleVote = (pollId, answerId) => {
makeCall('publishVote', pollId, answerId.id);
};

const mapPolls = () => {
const poll = Polls.findOne({});
if (!poll) {
Expand Down Expand Up @@ -30,9 +35,7 @@ const mapPolls = () => {
},
pollExists: true,
amIRequester,
handleVote(pollId, answerId) {
makeCall('publishVote', pollId, answerId.id);
},
handleVote: debounce(handleVote, 500, { leading: true, trailing: false }),
};
};

Expand Down

0 comments on commit d2cb02b

Please sign in to comment.