Protection on living and private when not logged in

svn: r19779
This commit is contained in:
Doug Blank
2012-06-06 21:28:44 +00:00
parent 5f8b823159
commit 0d3bf6bb16

View File

@@ -281,9 +281,7 @@ def view_list(request, view):
search.split(",", 1)] search.split(",", 1)]
object_list = Family.objects \ object_list = Family.objects \
.filter((Q(father__name__surname__surname__istartswith=surname) & .filter((Q(father__name__surname__surname__istartswith=surname) &
Q(father__name__first_name__istartswith=first)) | Q(mother__name__surname__surname__istartswith=surname))
(Q(mother__name__surname__surname__istartswith=surname) &
Q(mother__name__first_name__istartswith=first))
) \ ) \
.order_by("gramps_id") .order_by("gramps_id")
else: # no comma else: # no comma
@@ -291,9 +289,7 @@ def view_list(request, view):
.filter(Q(gramps_id__icontains=search) | .filter(Q(gramps_id__icontains=search) |
Q(family_rel_type__name__icontains=search) | Q(family_rel_type__name__icontains=search) |
Q(father__name__surname__surname__istartswith=search) | Q(father__name__surname__surname__istartswith=search) |
Q(father__name__first_name__istartswith=search) | Q(mother__name__surname__surname__istartswith=search)
Q(mother__name__surname__surname__istartswith=search) |
Q(mother__name__first_name__istartswith=search)
) \ ) \
.order_by("gramps_id") .order_by("gramps_id")
else: # no search else: # no search
@@ -381,13 +377,13 @@ def view_list(request, view):
query = build_person_query(request, search, protect=True) query = build_person_query(request, search, protect=True)
object_list = Name.objects \ object_list = Name.objects \
.filter(query) \ .filter(query) \
.order_by("surname__surname", "first_name") .order_by("surname__surname", "private", "person__probably_alive", "first_name")
else: else:
object_list = Name.objects \ object_list = Name.objects \
.select_related() \ .select_related() \
.filter(Q(private=False) & .filter(Q(private=False) &
Q(person__private=False)) \ Q(person__private=False)) \
.order_by("surname__surname", "first_name") .order_by("surname__surname", "private", "person__probably_alive", "first_name")
# END NON-AUTHENTICATED users # END NON-AUTHENTICATED users
view_template = 'view_people.html' view_template = 'view_people.html'
total = Name.objects.all().count() total = Name.objects.all().count()
@@ -684,24 +680,30 @@ def process_report(request, context, handle, action):
def build_person_query(request, search, protect): def build_person_query(request, search, protect):
if "," in search or "=" in search: if "," in search or "=" in search:
query = Q() query = Q()
terms = ["surname", "given"] if protect:
query &= (Q(private=False) & Q(person__private=False))
terms = ["surname", "given"]
else:
terms = ["surname"]
for term in [term.strip() for term in search.split(",")]: for term in [term.strip() for term in search.split(",")]:
if "=" in term: if "=" in term:
field, value = [s.strip() for s in term.split("=")] field, value = [s.strip() for s in term.split("=")]
else: else:
field = terms.pop(0) field = terms.pop(0)
value = term value = term
if "." in field: if "." in field and not protect:
query &= Q(**{field.replace(".", "__"): value}) query &= Q(**{field.replace(".", "__"): value})
elif field == "surname": elif field == "surname":
query &= Q(surname__surname__istartswith=value) query &= Q(surname__surname__istartswith=value)
elif field == "given": elif field == "given":
query &= Q(first_name__istartswith=value) if not protect:
query &= Q(first_name__istartswith=value)
elif field == "private": elif field == "private":
query &= Q(person__private=boolean(value)) if not protect:
elif field == "birth": query &= Q(person__private=boolean(value))
elif field == "birth" and not protect:
query &= Q(person__birth__year1=safe_int(value)) query &= Q(person__birth__year1=safe_int(value))
elif field == "death": elif field == "death" and not protect:
query &= Q(person__death__year1=safe_int(value)) query &= Q(person__death__year1=safe_int(value))
elif field == "id": elif field == "id":
query &= Q(person__gramps_id__icontains=value) query &= Q(person__gramps_id__icontains=value)
@@ -710,17 +712,17 @@ def build_person_query(request, search, protect):
else: else:
request.user.message_set.create(message="Invalid query field '%s'" % field) request.user.message_set.create(message="Invalid query field '%s'" % field)
else: else:
query = (Q(surname__surname__icontains=search) | if protect:
Q(first_name__icontains=search) | query = (Q(surname__surname__icontains=search) |
Q(suffix__icontains=search) | Q(surname__prefix__icontains=search) |
Q(surname__prefix__icontains=search) | Q(person__gramps_id__icontains=search))
Q(person__gender_type__name=search.title()) | else:
Q(person__birth__year1=safe_int(search)) | query = (Q(surname__surname__icontains=search) |
Q(person__death__year1=safe_int(search)) | Q(first_name__icontains=search) |
Q(title__icontains=search) | Q(suffix__icontains=search) |
Q(person__gramps_id__icontains=search)) Q(surname__prefix__icontains=search) |
if protect: Q(title__icontains=search) |
query &= (Q(private=False) & Q(person__private=False)) Q(person__gramps_id__icontains=search))
return query return query
def safe_int(num): def safe_int(num):