From 25de2207f76b870e3fcc2428024f20929eee6fb2 Mon Sep 17 00:00:00 2001 From: lars Date: Sat, 23 Feb 2013 18:37:00 +0000 Subject: [PATCH] added admin page for review of recent link submissions --- wortschlucker/src/wortschlucker.py | 42 +++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/wortschlucker/src/wortschlucker.py b/wortschlucker/src/wortschlucker.py index 1a72d8e..370f155 100755 --- a/wortschlucker/src/wortschlucker.py +++ b/wortschlucker/src/wortschlucker.py @@ -61,6 +61,9 @@ EXPORT_ENCODING = "utf-8" EXPORT_CHARSET = "utf8" EXPORT_FILENAME_TEMPLATE = "%%(prefix)s_%%(title)s_%s.csv" % datetime.datetime.now().strftime("%Y-%m-%d") DEFAULT_DATE = datetime.datetime.now() + datetime.timedelta(days=DEFAULT_DAYS_AHEAD) +URL_DOMAIN_REGEX = r"(\A|\s|\()([a-zA-Z_\-\.]+\.[a-zA-Z]{2,4})(/|\)|\s|\Z)" +URL_PROTOCOL_REGEX = r"(\A|\s|\()(https?://[\w/\?\.\#=;,_\-\~&]*)(\)|\s|\Z)" + POLL_SETTINGS = { "show_all_submissions": (bool, True), @@ -88,7 +91,7 @@ class ContentSubmission(sqlobject.SQLObject): submitter = sqlobject.UnicodeCol() content = sqlobject.UnicodeCol() poll_id = sqlobject.ForeignKey("Poll", cascade=True) - timestamp_creation = sqlobject.DateTimeCol() + timestamp_creation = sqlobject.DateTimeCol(default=datetime.datetime.now) def get_creation_time_string(self): return str(self.timestamp_creation) @@ -157,7 +160,7 @@ class Poll(sqlobject.SQLObject): admin_hash_key = sqlobject.StringCol() title = sqlobject.UnicodeCol() description = sqlobject.UnicodeCol() - timestamp_creation = sqlobject.DateTimeCol() + timestamp_creation = sqlobject.DateTimeCol(default=datetime.datetime.now) def get_related_polls(self): """ get all directly and indirectly connected polls up to a certain @@ -335,18 +338,25 @@ def get_markup_with_links(text): return prefix + url + suffix # surround all urls with html markup text = genshi.escape(text) - text = re.sub(r"(\A|\s|\()([a-zA-Z_\-\.]+\.[a-zA-Z]{2,4})(/|\)|\s|\Z)", - expand_protocol, text) - text = re.sub(r"(\A|\s|\()(https?://[\w/\?\.\#=;,_\-\~&]*)(\)|\s|\Z)", - get_link_markup, text) + text = re.sub(URL_DOMAIN_REGEX, expand_protocol, text) + text = re.sub(URL_PROTOCOL_REGEX, get_link_markup, text) return get_markup_with_formatted_linebreaks(text, "
") + +def has_links(text): + if re.search(URL_DOMAIN_REGEX, text) or re.search(URL_PROTOCOL_REGEX, text): + return True + else: + return False + + def get_markup_with_formatted_linebreaks(text, break_char): text = text.replace("\r\n", "\n") text = text.replace("\r", "\n") text = text.replace("\n", break_char) return text + def get_poll_setting_string(key, value): if not key in POLL_SETTINGS.keys(): return "" @@ -770,10 +780,9 @@ def new_poll(bobo_request, submit=None, cancel=None, author=None, title=None, # create the new poll hash_key = get_new_hash_key() admin_hash_key = get_new_hash_key() - now = datetime.datetime.now() new_poll = Poll(hash_key=hash_key, admin_hash_key=admin_hash_key, - timestamp_creation=now, author=data["author"], - title=data["title"], description=data["description"]) + author=data["author"], title=data["title"], + description=data["description"]) # apply the template settings for key, value in template_settings.items(): new_poll.change_setting(key, value) @@ -896,7 +905,6 @@ def submit_content(bobo_request, hash_key=None, submitter=None, content=None): return render("poll_details.html", input_data=data, **value_dict) else: # create the new submission content - data["timestamp_creation"] = datetime.datetime.now() data["poll_id"] = poll.id ContentSubmission(**data) # remove "content" for the next input @@ -1230,6 +1238,20 @@ def admin_maintenance(age_days=60, keyword="viagra", keyword_submission="viagra" return bobo.redirect("../admin") + +@bobo.query('/admin/spam_test') +def show_spam_test_page(bobo_request, last_days=14): + try: + last_days = int(last_days) + except ValueError: + last_days = 7 + now = datetime.datetime.now() + oldest = now - datetime.timedelta(days=last_days) + cs = ContentSubmission + submissions = [item for item in cs.select(cs.q.timestamp_creation >= oldest).orderBy("-timestamp_creation") if has_links(item.content)] + return render("admin_spam_test.html", submissions=submissions, + last_days=last_days, **get_default_values(bobo_request)) + @bobo.query('/admin') @bobo.query('/admin/') @bobo.query('/admin/page/:page')