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")


Reply via email to