You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@steve.apache.org by hu...@apache.org on 2015/03/21 12:43:55 UTC
svn commit: r1668245 - in /steve/trunk/pytest/www: cgi-bin/rest_admin.py
htdocs/edit_election.html
Author: humbedooh
Date: Sat Mar 21 11:43:55 2015
New Revision: 1668245
URL: http://svn.apache.org/r1668245
Log:
add invite feature
Modified:
steve/trunk/pytest/www/cgi-bin/rest_admin.py
steve/trunk/pytest/www/htdocs/edit_election.html
Modified: steve/trunk/pytest/www/cgi-bin/rest_admin.py
URL: http://svn.apache.org/viewvc/steve/trunk/pytest/www/cgi-bin/rest_admin.py?rev=1668245&r1=1668244&r2=1668245&view=diff
==============================================================================
--- steve/trunk/pytest/www/cgi-bin/rest_admin.py (original)
+++ steve/trunk/pytest/www/cgi-bin/rest_admin.py Sat Mar 21 11:43:55 2015
@@ -359,6 +359,47 @@ else:
response.respond(404, {'message': 'No such election'})
else:
response.respond(404, {'message': 'No such election'})
+ elif action == "invite" and karma >= 3:
+ # invite one or more people to an election
+ if election:
+ email = form.getvalue('email')
+ msgtype = form.getvalue('msgtype')
+ msgtemplate = form.getvalue('msgtemplate')
+ if not email or len(email) > 300 or not re.match(r"([^@]+@[^@]+)", email):
+ response.respond(400, {'message': 'Could not request voter ID: Invalid email address specified'})
+ elif not msgtemplate or len(msgtemplate) < 10:
+ response.respond(400, {'message': 'No message template specified'})
+ else:
+ js = []
+ elpath = os.path.join(homedir, "issues", election)
+ if os.path.isdir(elpath):
+ basedata = {}
+ try:
+ with open(elpath + "/basedata.json", "r") as f:
+ basedata = json.loads(f.read())
+ f.close()
+ if (not 'open' in basedata or basedata['open'] != "true") and msgtype == "open":
+ raise Exception("An open vote invite was requested, but this election is not public")
+ if msgtype != "open":
+ voterid, xhash = voter.add(election, basedata, email)
+ message = msgtemplate.replace("$votelink", "%s/election.html?%s/%s" % (config.get("general", "rooturl"), election, voterid))
+ message = message.replace("$title", basedata['title'])
+ subject = "Election open for votes: %s (%s)" % (election, basedata['title'])
+ voter.email(email, subject, message)
+ else:
+ message = msgtemplate.replace("$votelink", "%s/request_link.html?%s" % (config.get("general", "rooturl"), election))
+ message = message.replace("$title", basedata['title'])
+ subject = "Public election open for votes: %s (%s)" % (election, basedata['title'])
+ voter.email(email, subject, message)
+ response.respond(200, {'message': "Vote link sent"})
+ except Exception as err:
+ response.respond(500, {'message': 'Could not load base data: %s' % err})
+
+ response.respond(200, {'message': "Vote link sent to %s" % email})
+ else:
+ response.respond(404, {'message': 'No such election'})
+ else:
+ response.respond(404, {'message': 'No such election'})
else:
response.respond(400, {'message': "No (or invalid) action supplied"})
Modified: steve/trunk/pytest/www/htdocs/edit_election.html
URL: http://svn.apache.org/viewvc/steve/trunk/pytest/www/htdocs/edit_election.html?rev=1668245&r1=1668244&r2=1668245&view=diff
==============================================================================
--- steve/trunk/pytest/www/htdocs/edit_election.html (original)
+++ steve/trunk/pytest/www/htdocs/edit_election.html Sat Mar 21 11:43:55 2015
@@ -6,9 +6,48 @@
<script src="js/steve_rest.js" type="text/javascript"></script>
<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/jquery-ui.js" type="text/javascript"></script>
+<script type="text/javascript">
+ var ecount = 0;
+ function seedInvite(type) {
+ if (type == "closed") {
+ document.getElementById('msgtemplate').value = "A private election for \"$title\" has been called\n\nTo vote, please visit: $votelink\nThis is a private vote URL for your eyes only."
+ } else {
+ document.getElementById('msgtemplate').value = "A public election for \"$title\" has been called\n\nTo vote, please register for a vote at: $votelink\nAnyone can register to vote."
+ }
+ }
+ function removeEmail(code, response, state) {
+ if (code == 200) {
+ ecount--;
+ document.getElementById('invitestatus').innerHTML = ecount + " emails left to send..."
+ if (ecount == 0) {
+ document.getElementById('invitestatus').innerHTML = "All invites have been sent!"
+ }
+ } else {
+ alert(response.message)
+ }
+ }
+ function sendInvites() {
+ var emails = document.getElementById('emails').value.split(/\r?\n/)
+ var msgtype = document.getElementById('msgtype').value;
+ var msgtemplate = document.getElementById('msgtemplate').value;
+ var election = document.location.search.substr(1);
+ ecount = emails.length;
+ for (i in emails) {
+ var email = emails[i]
+ postREST("/steve/admin/invite/" + election, {
+ email: email,
+ msgtype: msgtype,
+ msgtemplate: msgtemplate
+ },
+ undefined,
+ removeEmail,
+ null)
+ }
+ }
+</script>
<title>Edit election</title>
</head>
-<body onload="window.setTimeout(loadAdminElectionData, 1000);">
+<body onload="window.setTimeout(loadAdminElectionData, 1000); seedInvite('closed');">
<div id="popups"></div>
<p style="text-align: center;">
<img src="/images/steve_logo.png"/>
@@ -75,6 +114,30 @@
<input type="button" onclick="createIssue();" value="Create issue" class="btn-green"/>
</div>
</fieldset>
+
+
+ <fieldset>
+ <legend>Invite one or more users to this election</legend>
+ <div class="keyvaluepair">
+ <div class="keyfield">Invitation type:</div>
+ <select id="msgtype" onchange="seedInvite(this.value)">
+ <option value="closed">Closed (private) invite</option>
+ <option value="open">Open (public) invite</option>
+ </select>
+ </div>
+ <div class="keyvaluepair">
+ <div class="keyfield">Invitation type:</div>
+ <textarea id="msgtemplate" style="width: 600px; height: 200px;">
+
+ </textarea>
+ </div>
+ <div class="keyvaluepair">
+ <div class="keyfield">Email address(es) to invite<br/>(one per line):</div>
+ <textarea id="emails" style="width: 300px; height: 300px;"></textarea>
+ </div>
+ <input type="button" value="Send invitation(s)" onclick="sendInvites()"/><br/>
+ <span id="invitestatus"></span>
+ </fieldset>
</form>
</div>
</body>