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/23 11:44:58 UTC
svn commit: r1668586 - in /steve/trunk/pysteve/www: cgi-bin/lib/election.py
cgi-bin/rest_admin.py htdocs/admin/edit_election.html
htdocs/css/steve_interactive.css htdocs/js/steve_rest.js
Author: humbedooh
Date: Mon Mar 23 10:44:57 2015
New Revision: 1668586
URL: http://svn.apache.org/r1668586
Log:
allow owners to close/reopen elections
Modified:
steve/trunk/pysteve/www/cgi-bin/lib/election.py
steve/trunk/pysteve/www/cgi-bin/rest_admin.py
steve/trunk/pysteve/www/htdocs/admin/edit_election.html
steve/trunk/pysteve/www/htdocs/css/steve_interactive.css
steve/trunk/pysteve/www/htdocs/js/steve_rest.js
Modified: steve/trunk/pysteve/www/cgi-bin/lib/election.py
URL: http://svn.apache.org/viewvc/steve/trunk/pysteve/www/cgi-bin/lib/election.py?rev=1668586&r1=1668585&r2=1668586&view=diff
==============================================================================
--- steve/trunk/pysteve/www/cgi-bin/lib/election.py (original)
+++ steve/trunk/pysteve/www/cgi-bin/lib/election.py Mon Mar 23 10:44:57 2015
@@ -47,6 +47,22 @@ def getBasedata(election, hideHash=False
return basedata
return None
+def close(election, reopen = False):
+ "Mark an election as closed"
+ elpath = os.path.join(homedir, "issues", election)
+ if os.path.isdir(elpath):
+ basedata = {}
+ with open(elpath + "/basedata.json", "r") as f:
+ data = f.read()
+ f.close()
+ basedata = json.loads(data)
+ if reopen:
+ basedata['closed'] = False
+ else:
+ basedata['closed'] = True
+ with open(elpath + "/basedata.json", "w") as f:
+ f.write(json.dumps(basedata))
+ f.close()
def getIssue(electionID, issueID):
"Get JSON data from an issue"
Modified: steve/trunk/pysteve/www/cgi-bin/rest_admin.py
URL: http://svn.apache.org/viewvc/steve/trunk/pysteve/www/cgi-bin/rest_admin.py?rev=1668586&r1=1668585&r2=1668586&view=diff
==============================================================================
--- steve/trunk/pysteve/www/cgi-bin/rest_admin.py (original)
+++ steve/trunk/pysteve/www/cgi-bin/rest_admin.py Mon Mar 23 10:44:57 2015
@@ -487,7 +487,25 @@ else:
else:
response.respond(403, {'message': "You do not have karma to tally the votes here"})
else:
- response.respond(404, {'message': 'No such election or issue'})
+ response.respond(404, {'message': 'No such election or issue'})
+ # Close an election
+ elif action == "close" and electionID:
+ reopen = form.getvalue('reopen')
+ if election.exists(electionID):
+ basedata = election.getBasedata(electionID)
+ if karma >= 4 or ('owner' in basedata and basedata['owner'] == whoami):
+ try:
+ election.close(electionID, reopen=reopen)
+ if reopen:
+ response.respond(200, {'message': "Election reopened"})
+ else:
+ response.respond(200, {'message': "Election closed"})
+ except Exception as err:
+ response.respond(500, {'message': "Could not close election: %s" % err})
+ else:
+ response.respond(403, {'message': "You do not have karma to tally the votes here"})
+ else:
+ response.respond(404, {'message': 'No such election or issue'})
else:
response.respond(400, {'message': "No (or invalid) action supplied"})
else:
Modified: steve/trunk/pysteve/www/htdocs/admin/edit_election.html
URL: http://svn.apache.org/viewvc/steve/trunk/pysteve/www/htdocs/admin/edit_election.html?rev=1668586&r1=1668585&r2=1668586&view=diff
==============================================================================
--- steve/trunk/pysteve/www/htdocs/admin/edit_election.html (original)
+++ steve/trunk/pysteve/www/htdocs/admin/edit_election.html Mon Mar 23 10:44:57 2015
@@ -33,10 +33,10 @@
Add an issue
</a>
- <a href="javascript:void(location.href='close.html'+document.location.search);"
+ <a id="closea" href="javascript:void(location.href='close.html'+document.location.search);"
class="btn-red" title="Click to close this election, preventing further voting">
<img style="vertical-align: middle;" src="/images/icon_close.png"/>
- Close election
+ <span id="closex">Close election</span>
</a>
<a href="javascript:void(location.href='edit_basedata.html'+document.location.search);"
Modified: steve/trunk/pysteve/www/htdocs/css/steve_interactive.css
URL: http://svn.apache.org/viewvc/steve/trunk/pysteve/www/htdocs/css/steve_interactive.css?rev=1668586&r1=1668585&r2=1668586&view=diff
==============================================================================
--- steve/trunk/pysteve/www/htdocs/css/steve_interactive.css (original)
+++ steve/trunk/pysteve/www/htdocs/css/steve_interactive.css Mon Mar 23 10:44:57 2015
@@ -476,6 +476,7 @@ fieldset legend {
}
+
.issueListItemWide {
border: 1px dotted #666;
padding: 4px;
@@ -485,7 +486,21 @@ fieldset legend {
font-size: 16px;
background: linear-gradient(to bottom, #f8f8f8 0%,#dddddd 100%);
-khtml-user-drag: element;
- animation: fadein 1s
+ animation: fadein 1s;
+ cursor: pointer;
+}
+
+.issueListItemWideClosed {
+ border: 1px dotted #666;
+ padding: 4px;
+ width: 980px;
+ min-height: 25px;
+ font-family: monospace;
+ font-size: 16px;
+ background: linear-gradient(to bottom, #d8a8a8 0%,#cc6666 100%);
+ -khtml-user-drag: element;
+ animation: fadein 1s;
+ cursor: pointer;
}
@keyframes fadein {
Modified: steve/trunk/pysteve/www/htdocs/js/steve_rest.js
URL: http://svn.apache.org/viewvc/steve/trunk/pysteve/www/htdocs/js/steve_rest.js?rev=1668586&r1=1668585&r2=1668586&view=diff
==============================================================================
--- steve/trunk/pysteve/www/htdocs/js/steve_rest.js (original)
+++ steve/trunk/pysteve/www/htdocs/js/steve_rest.js Mon Mar 23 10:44:57 2015
@@ -99,8 +99,14 @@ function createElection() {
// Election editing
function renderEditElection(code, response, election) {
if (code == 200) {
- document.getElementById('title').innerHTML = "Edit election: " + response.base_data.title + " (#" + election + ")"
+ var c = response.base_data.closed ? " (<font color='red'>CLOSED!</font>)" : ""
+ document.getElementById('title').innerHTML = "Edit election: " + response.base_data.title + " (#" + election + ")" + c
+ if (response.base_data.closed) {
+ document.getElementById('closea').setAttribute("href", "javascript:void(location.href='reopen.html'+document.location.search);");
+ document.getElementById('closex').innerHTML = "Reopen election"
+ document.getElementById('closea').setAttribute("title", "Click to reopen this election")
+ }
var obj = document.getElementById('ballot')
obj.innerHTML = "There are no issues in this election yet"
var s = 0;
@@ -451,6 +457,25 @@ function saveElection() {
election)
}
+function closeElectionCallback(code, response, election) {
+ if (code == 200) {
+ alert(response.message)
+ location.href = "/admin/index.html"
+ } else {
+ alert(response.message)
+ }
+}
+function closeElection(reopen) {
+ var l = document.location.search.substr(1).split('/');
+ var election = l[0]
+
+ postREST("/steve/admin/close/" + election, {
+ reopen: reopen ? "true" : null
+ },
+ undefined,
+ closeElectionCallback,
+ election)
+}
function deleteIssueCallback(code, response, election) {
@@ -776,6 +801,7 @@ function castVoteCallback(code, response
function showElections(code, response, state) {
var obj = document.getElementById('preloaderWrapper')
+ obj.setAttribute("id", "contents")
//obj.setAttribute("id", "electionWrapper")
obj.innerHTML = "<h2>Your elections:</h2><p>Click on an election to edit it</p>"
var ol = document.createElement('ol')
@@ -787,7 +813,11 @@ function showElections(code, response, s
var election = response.elections[i]
var outer = document.createElement('li');
- outer.setAttribute("class", "issueListItem")
+ outer.setAttribute("class", "issueListItemWide")
+ if (election.closed) {
+ outer.setAttribute("class", "issueListItemWideClosed")
+ outer.setAttribute("title", "This election has beeen closed")
+ }
var no = document.createElement('div');
no.setAttribute("class", "issueNumber")