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>
         &nbsp; 
-        <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>
         &nbsp; 
         <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")