mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
wip: problem with postgres bytea fields
Partial fix. Need to update all queries using the Maddr.email field. see #298
This commit is contained in:
@@ -7,6 +7,7 @@ from functools import wraps
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.db.models import Q
|
||||
from modoboa.lib import parameters
|
||||
from modoboa.lib.dbutils import db_type
|
||||
from models import Msgrcpt
|
||||
|
||||
def selfservice(ssfunc=None):
|
||||
@@ -41,6 +42,8 @@ def get_nb_requests(user):
|
||||
if not user.is_superuser:
|
||||
doms = user.get_domains()
|
||||
regexp = "(%s)" % '|'.join(map(lambda dom: dom.name, doms))
|
||||
if db_type() == 'postgres':
|
||||
return len(Msgrcpt.objects.filter(rq).extra(where=["convert_from(maddr.email, 'UTF8') ~ '%s'" % (regexp,)], tables=['maddr']))
|
||||
doms_q = Q(rid__email__regex=regexp)
|
||||
rq &= doms_q
|
||||
return len(Msgrcpt.objects.filter(rq))
|
||||
|
||||
@@ -70,18 +70,32 @@ def _listing(request):
|
||||
q = Q(rs='p')
|
||||
else:
|
||||
q = ~Q(rs='D')
|
||||
if request.user.group == 'SimpleUsers':
|
||||
q &= Q(rid__email=request.user.email)
|
||||
else:
|
||||
if not request.user.is_superuser:
|
||||
doms = request.user.get_domains()
|
||||
regexp = "(%s)" % '|'.join(map(lambda dom: dom.name, doms))
|
||||
doms_q = Q(rid__email__regex=regexp)
|
||||
q &= doms_q
|
||||
if rcptfilter is not None:
|
||||
q &= Q(rid__email__contains=rcptfilter)
|
||||
|
||||
msgs = Msgrcpt.objects.filter(q).values("mail_id")
|
||||
if db_type() != 'postgres':
|
||||
if request.user.group == 'SimpleUsers':
|
||||
q &= Q(rid__email=request.user.email)
|
||||
else:
|
||||
if not request.user.is_superuser:
|
||||
doms = request.user.get_domains()
|
||||
regexp = "(%s)" % '|'.join(map(lambda dom: dom.name, doms))
|
||||
doms_q = Q(rid__email__regex=regexp)
|
||||
q &= doms_q
|
||||
if rcptfilter is not None:
|
||||
q &= Q(rid__email__contains=rcptfilter)
|
||||
|
||||
msgs = Msgrcpt.objects.filter(q).values("mail_id")
|
||||
else:
|
||||
if request.user.group == 'SimpleUsers':
|
||||
msgs = Msgrcpt.objects.filter(q).extra(where=["convert_from(maddr.email, 'UTF8') = '%s'" % request.user.email], tables=['maddr'])
|
||||
else:
|
||||
where = []
|
||||
if not request.user.is_superuser:
|
||||
doms = request.user.get_domains()
|
||||
regexp = "(%s)" % '|'.join(map(lambda dom: dom.name, doms))
|
||||
where.append("convert_from(maddr.email, 'UTF8') ~ '%s'" % regexp)
|
||||
if rcptfilter is not None:
|
||||
where.append("convert_from(maddr.email, 'UTF8') LIKE '%%%s%%'" % rcptfilter)
|
||||
msgs = Msgrcpt.objects.filter(q).extra(where=where, tables=['maddr']).values("mail_id")
|
||||
|
||||
if request.GET.has_key("page"):
|
||||
request.session["page"] = request.GET["page"]
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
# coding: utf-8
|
||||
from django.db import connection
|
||||
from django.conf import settings
|
||||
|
||||
def db_table_exists(table, cursor=None):
|
||||
"""Check if table exists
|
||||
@@ -18,3 +19,15 @@ def db_table_exists(table, cursor=None):
|
||||
raise Exception("unable to determine if the table '%s' exists" % table)
|
||||
else:
|
||||
return table in table_names
|
||||
|
||||
def db_type():
|
||||
"""Return the type of the *default* database
|
||||
|
||||
Supported values : 'postgres', 'mysql', 'sqlite'
|
||||
|
||||
:return: a string or None
|
||||
"""
|
||||
for t in ['postgres', 'mysql', 'sqlite']:
|
||||
if settings.DATABASES['default']['ENGINE'].find(t) != -1:
|
||||
return t
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user