diff --git a/wortschlucker/src/wortschlucker.py b/wortschlucker/src/wortschlucker.py index 9389da1..4f41898 100755 --- a/wortschlucker/src/wortschlucker.py +++ b/wortschlucker/src/wortschlucker.py @@ -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('/')