admin: allow sorting polls by number of submissions

This commit is contained in:
phear 2013-02-23 12:33:30 +00:00
parent fa37629d2c
commit 88a7725d0f
1 changed files with 22 additions and 7 deletions

View File

@ -38,7 +38,8 @@ CONFIG_FILE = os.path.join(BASE_DIR, "wortschlucker.conf")
config = ConfigParser.SafeConfigParser()
config.read(CONFIG_FILE)
db_uri = config.get("database", "uri")
sqlobject.sqlhub.processConnection = sqlobject.connectionForURI(db_uri)
connection = sqlobject.connectionForURI(db_uri)
sqlobject.sqlhub.processConnection = connection
loader = genshi.template.TemplateLoader(os.path.join(BASE_DIR, 'templates'), auto_reload=False)
BLOG_DIR = os.path.join(BASE_DIR, "blog")
@ -1109,7 +1110,7 @@ def serve_blog(bobo_request, blog_id=None):
value_dict["blog_list"] = blog_list
return render("blog_list.html", **value_dict)
def show_poll_list(bobo_request, render_file, page_size, page=None,
def show_poll_list(bobo_request, render_file, page_size, page=None, sort_by="time",
filter_private=True, value_dict=None):
if value_dict is None:
value_dict = {}
@ -1120,10 +1121,24 @@ def show_poll_list(bobo_request, render_file, page_size, page=None,
PollSetting.q.key == "public",
PollSetting.q.value == true_string,
PollSetting.q.poll_id == Poll.q.id))
poll_count = polls.count()
else:
polls = Poll.select()
polls = polls.orderBy("-timestamp_creation")
poll_count = polls.count()
if sort_by == "submissions":
# Nach Anzahl der Kommentare filtern
# das rohe SQL geht so: select poll.id FROM poll LEFT JOIN content_submission ON poll.id = content_submission.poll_id_id GROUP BY content_submission.poll_id_id, poll.id ORDER BY count(content_submission.id) desc;
# das liefert absteigend nach Beitragsmenge sortiert die polls zurueck. Allerdings fehlen aktuell noch die polls ohne Beitraege.
# fiese rohe SQL-Anfrage machen, weil mir das mit sqlobject zu kompliziert ist
rawpolls = connection.queryAll("""select poll.id FROM poll LEFT JOIN content_submission ON poll.id = content_submission.poll_id_id GROUP BY content_submission.poll_id_id, poll.id ORDER BY count(content_submission.id) desc;""")
polls = []
# jetzt noch aus den ids wieder eine SelectReturn-Liste machen:
for id in rawpolls:
polls.append(Poll.get(id[0]))
poll_count=len(polls)
else: #sort_by == time
polls = Poll.select()
polls = polls.orderBy("-timestamp_creation")
poll_count = polls.count()
if page is None:
page = 1
else:
@ -1205,7 +1220,7 @@ def admin_maintenance(age_days=60, keyword="viagra", keyword_submission="viagra"
@bobo.query('/admin')
@bobo.query('/admin/')
@bobo.query('/admin/page/:page')
def show_admin_page(bobo_request, page=None, page_size=50):
def show_admin_page(bobo_request, page=None, page_size=50,sort_by="time"):
try:
page_size = int(page_size)
except ValueError:
@ -1213,7 +1228,7 @@ def show_admin_page(bobo_request, page=None, page_size=50):
value_dict = {}
value_dict["poll_table"] = Poll
value_dict["submission_table"] = ContentSubmission
return show_poll_list(bobo_request, "admin.html", page_size, page=page,
return show_poll_list(bobo_request, "admin.html", page_size, sort_by=sort_by, page=page,
filter_private=False, value_dict=value_dict)
@bobo.query('/')