+#!/usr/bin/python
+
+import sys
+import os
+import sqlite3
+import cgi
+import smtplib
+from email.mime.text import MIMEText
+import datetime
+import subprocess
+import random
+
+# Setup a sqlite3 database before deploying:
+# sqlite3 ratings.db
+# sqlite> CREATE TABLE ratings(formalness, citeyness, reviewyness, accurateness, boringness, pointyness, overallness, version, time, message, page);
+# Get rid of database by DROP TABLE or deleting the file
+
+secret_answers = ["No", "no"]
+dbfile = "ratings.db"
+
+def print_form(name):
+ """ Print the form """
+ f = open(name,"r")
+ for line in f.readlines():
+ print(line)
+ f.close()
+
+def git_stamp():
+ # Python is nice but sometimes you just need to bash it over the head
+ p = subprocess.Popen("git show | head --lines=1 | awk '{print $NF}'", stdout=subprocess.PIPE, shell=True)
+ return p.stdout.readline().strip(" \r\n")
+
+def main(argv):
+ """ Do the shit """
+ con = sqlite3.connect(dbfile)
+ c = con.cursor()
+
+ # Values we expect
+ values = {
+ "formalness" : "",
+ "citeyness" : "",
+ "reviewyness" : "",
+ "accurateness" : "",
+ "boringness" : "",
+ "pointyness" : "",
+ "overallness" : "",
+ "page" : 0,
+ "secret" : "No"
+ }
+
+ sanity = True
+
+ # Max pages
+ p = subprocess.Popen("pdfinfo thesis.pdf | grep Pages | sed 's/[^0-9]*//'", stdout=subprocess.PIPE, shell=True)
+ max_pages = int(p.stdout.read().strip(" \r\bn"))
+
+
+
+ form = cgi.FieldStorage()
+
+ # Check we have all the values
+ for k in values.keys():
+ if k in form:
+ values[k] = form[k].value
+
+
+ # No values? Print the form
+ if len(form.keys()) <= 0 or "page" not in form:
+ values["page"] = random.randint(1, max_pages)
+
+ print("Content-type: text/html\n")
+ print("<!DOCTYPE html>")
+ print("<html>")
+ print("<head><title>Rate My LitReview(TM) (Patent Pending)</title>")
+ print("<style>body {font-size: 0;}")
+ print("body * {font-size: 16px;}")
+ print("</style>")
+ print("</head>")
+ print("<body style=\"font-size: 0;\">")
+
+ # Check page number
+ try:
+ values["page"] = int(values["page"])
+ except:
+ print("<p> Invalid Page %s!</p>" % values["page"])
+ values["page"] = random.randint(1, max_pages)
+ sanity = False
+
+ print("<form id=\"rating\" action=\"rate-my-litreview.py\" method=\"POST\">")
+
+
+ print("<h1>Rate My Lit Review</h1>")
+ print("<p>Read a page, then rate it with the hammer of judgement!</p>")
+ print("<p> Page: <input type=\"text\" name=\"page\" value=\"%d\" disabled> of %d" % (values["page"], max_pages))
+ if values["page"] > 1:
+ print("<a href=\"rate-my-litreview.py?page=%d\">Prev</a>" % (values["page"]-1))
+ if values["page"] < max_pages:
+ print("<a href=\"rate-my-litreview.py?page=%d\">Next</a>" % (values["page"]+1))
+ print("</p>")
+
+
+
+
+
+ # Check secret question
+ if values["secret"] not in secret_answers:
+ print("<p><b>You failed the turing test!</b> Hint: The answer is \"No\"</p>")
+ sanity = False
+ del values["secret"]
+
+
+ print("<div style=\"float: left; border:0px solid black;\">")
+ print("<img src=\"read-my-litreview.py?page=%d\" border=\"1\";>" % values["page"])
+ print("</div>")
+
+
+ print("<div style=\"float: right; border:0px solid black; width:43%;\">")
+ print_form("rate-my-litreview.html")
+ print("</div>")
+
+
+ if not sanity:
+ return 1
+
+ if len(form.keys()) <= 1:
+ print("</body></html>")
+ return 0
+
+ # Sanity checks complete; set other values
+ values.update({"time" : int(datetime.datetime.now().strftime("%s"))})
+ values.update({"version" : git_stamp()})
+
+ # Produce emails
+
+ # Send emails
+ userMsg = "Someone Rated Your LitReview!\n"
+ userMsg += "Your ratings\n-----------------\n"
+ for k in values:
+ userMsg += str(k) + ":\t" + str(values[k])
+
+ userMsg += "Happy LitReviewing!\n"
+ userMsg += "\n\nNOTE: This Message Automatically Sent By Rate My LitReview(TM) (Patent Pending)\n"
+ userMsg = MIMEText(userMsg)
+ for i,msg in enumerate([userMsg]):
+ msg["Subject"] = "Rate My LitReview"
+ msg["To"] = emails[i]
+ s = smtplib.SMTP("localhost")
+ s.sendmail(msg["From"], [msg["To"]], msg.as_string())
+ s.quit()
+
+ # Tell them what happened.
+ # Do the thing
+ c.execute("INSERT INTO ratings("+",".join(values.keys())+") VALUES("+",".join(["?" for _ in xrange(len(values.keys()))])+")", [values[k] for k in values.keys()])
+ con.commit()
+ con.close()
+
+ print("<script>alert(\"Thank you for rating Page %d.\");</script><noscript>Thanks for rating Page %d</noscript>" % (values["page"], values["page"]))
+ print("</body></html>")
+ return 0
+
+
+if __name__ == "__main__":
+ #try:
+ sys.exit(main(sys.argv))
+ #except:
+ # print "Content-type: text/plain\r\n\r\n"
+ # print "Something went wrong! You were unable to Rate Sam's LitReview(TM)!\nPlease send him an abusive email instead <matches at ucc.asn.au>\n"
+