diff --git a/Bantracker/bans.cgi b/Bantracker/bans.cgi index f4aa960..a124af8 100755 --- a/Bantracker/bans.cgi +++ b/Bantracker/bans.cgi @@ -211,10 +211,12 @@ cur = con.cursor() cur.execute("SELECT channel,mask,operator,time,removal,removal_op,id FROM bans ORDER BY id DESC") bans = cur.fetchall() con.close() - -def myfilter(item, regex, kick, ban, oldban, mute, oldmute, floods, operator): + +def myfilter(item, regex, kick, ban, oldban, mute, oldmute, floods, operator, channel) if operator: if not operator.lower() in item[2].lower(): return False + if channel: + if not channel.lower() in item[0].lower(): return False if '!' not in item[1]: if not kick: return False if not floods: @@ -230,22 +232,34 @@ def myfilter(item, regex, kick, ban, oldban, mute, oldmute, floods, operator): else: if not ban: return False if operator: - return regex.search(item[0]) or regex.search(item[1]) or (item[5] and regex.search(item[5])) - return regex.search(item[0]) or regex.search(item[1]) or regex.search(item[2]) or (item[5] and regex.search(item[5])) + return regex.search(item[1]) or regex.search(item[0]) or (item[5] and regex.search(item[5])) + return regex.search(item[1]) or regex.search(item[2]) or regex.search(item[0]) or (item[5] and regex.search(item[5])) + +def getQueryTerm(query, term): + if term[-1] != ':': + term += ':' + if term in query: + idx = query.index(term) + len(term) + ret = query[idx:].split(None, 1)[0] + query = query.replace(term + ret, '', 1).strip() + return (query, ret) + return (query, None) if form.has_key('query'): - k = b = ob = m = om = fb = oper = False + k = b = ob = m = om = fb = False + oper = chan = False if form.has_key('kicks'): k = True if form.has_key('oldbans'): ob = True if form.has_key('bans'): b = True if form.has_key('oldmutes'): om = True if form.has_key('mutes'): m = True if form.has_key('floods'): fb = True - if form['query'].value.startswith("oper:"): - oper = form['query'].value[4:].split(':', 1)[1].split(None, 1)[0] - form['query'].value = form['query'].value[5+len(oper):].strip() + if "chan:" in form['query'].value: + (form['query'].value, chan) = getQueryTerm(form['query'].value, "chan:") + if "oper:" in form['query'].value: + (form['query'].value, oper) = getQueryTerm(form['query'].value, "oper:") regex = re.compile(re.escape(form['query'].value).replace('\%','.*'), re.DOTALL | re.I) - bans = filter(lambda x: myfilter(x, regex, k, b, ob, m, om, fb, oper), bans) + bans = filter(lambda x: myfilter(x, regex, k, b, ob, m, om, fb, oper, chan), bans) start = 0; end = len(bans) else: page = 0 @@ -327,11 +341,18 @@ for b in bans[start:end]: print '

' print '' % b[6] print '
' - print '' + print '' print '' if not bans and form.has_key('query'): - print "
No matches for: "%s"
" % form['query'].value + if chan and oper: + print "
No matches for: "%s" in %s by %s;
" % (form['query'].value, chan, oper) + elif chan: + print "
No matches for: "%s" in %s
" % (form['query'].value, chan) + elif oper: + print "
No matches for: "%s" by %s
" % (form['query'].value, oper) + else: + print "
No matches for: "%s"
" % form['query'].value # Aaaaaaaaaaaaaaaaand send! send_page('bans.tmpl') diff --git a/Bantracker/bans.tmpl b/Bantracker/bans.tmpl index 031f5bb..54fee8c 100644 --- a/Bantracker/bans.tmpl +++ b/Bantracker/bans.tmpl @@ -65,6 +65,7 @@

Ubottu Bantracker

+ %e

%s

diff --git a/Bantracker/empty.tmpl b/Bantracker/empty.tmpl index 3aa8911..22d0be1 100644 --- a/Bantracker/empty.tmpl +++ b/Bantracker/empty.tmpl @@ -1 +1,2 @@ +%e %s diff --git a/bot.css b/bot.css index 403528e..785683d 100644 --- a/bot.css +++ b/bot.css @@ -84,7 +84,7 @@ div.invisible { div.log { display: none; color: black; - width: 100%%; + width: 100%; font-family: monospace; white-space: normal; text-align: left; diff --git a/commoncgi.py b/commoncgi.py index f2b1ce8..afc6a0b 100644 --- a/commoncgi.py +++ b/commoncgi.py @@ -37,10 +37,12 @@ class IOWrapper: return self.buf sys.stdout = IOWrapper() +sys.stderr = IOWrapper() def send_page(template): data = sys.stdout.getvalue() sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ print "Content-Type: text/html" print cookie print "" @@ -48,7 +50,11 @@ def send_page(template): fd = open(template) tmpl = fd.read() fd.close() - print tmpl[:tmpl.find('%s')] + print tmpl[:tmpl.find('%e')] + for e in errdata: + print e + print tmpl[tmpl.find('%e')+2:tmpl.find('%s')] +# print tmpl[:tmpl.find('%s')] for d in data: print d print tmpl[tmpl.find('%s')+2:]