Search only shows results in groups of which user is a member
This commit is contained in:
parent
0f018b8572
commit
929f8df727
1 changed files with 64 additions and 62 deletions
126
todo/views.py
126
todo/views.py
|
@ -11,7 +11,6 @@ from django.db.models import Q
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.shortcuts import get_object_or_404, render, redirect
|
from django.shortcuts import get_object_or_404, render, redirect
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.urls import reverse
|
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
|
|
||||||
from todo import settings
|
from todo import settings
|
||||||
|
@ -225,6 +224,70 @@ def reorder_tasks(request):
|
||||||
return HttpResponse(status=201)
|
return HttpResponse(status=201)
|
||||||
|
|
||||||
|
|
||||||
|
@user_passes_test(check_user_allowed)
|
||||||
|
def add_list(request):
|
||||||
|
"""Allow users to add a new todo list to the group they're in.
|
||||||
|
"""
|
||||||
|
if request.POST:
|
||||||
|
form = AddTaskListForm(request.user, request.POST)
|
||||||
|
if form.is_valid():
|
||||||
|
try:
|
||||||
|
form.save()
|
||||||
|
messages.success(request, "A new list has been added.")
|
||||||
|
return redirect('todo:lists')
|
||||||
|
|
||||||
|
except IntegrityError:
|
||||||
|
messages.error(
|
||||||
|
request,
|
||||||
|
"There was a problem saving the new list. "
|
||||||
|
"Most likely a list with the same name in the same group already exists.")
|
||||||
|
else:
|
||||||
|
if request.user.groups.all().count() == 1:
|
||||||
|
form = AddTaskListForm(request.user, initial={"group": request.user.groups.all()[0]})
|
||||||
|
else:
|
||||||
|
form = AddTaskListForm(request.user)
|
||||||
|
|
||||||
|
return render(request, 'todo/add_list.html', locals())
|
||||||
|
|
||||||
|
|
||||||
|
@user_passes_test(check_user_allowed)
|
||||||
|
def search(request):
|
||||||
|
"""Search for tasks user has permission to see.
|
||||||
|
"""
|
||||||
|
if request.GET:
|
||||||
|
|
||||||
|
query_string = ''
|
||||||
|
found_items = None
|
||||||
|
if ('q' in request.GET) and request.GET['q'].strip():
|
||||||
|
query_string = request.GET['q']
|
||||||
|
|
||||||
|
found_items = Item.objects.filter(
|
||||||
|
Q(title__icontains=query_string) |
|
||||||
|
Q(note__icontains=query_string)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# What if they selected the "completed" toggle but didn't enter a query string?
|
||||||
|
# We still need found_items in a queryset so it can be "excluded" below.
|
||||||
|
found_items = Item.objects.all()
|
||||||
|
|
||||||
|
if 'inc_complete' in request.GET:
|
||||||
|
found_items = found_items.exclude(completed=True)
|
||||||
|
|
||||||
|
else:
|
||||||
|
query_string = None
|
||||||
|
found_items = None
|
||||||
|
|
||||||
|
# Only include items that are in groups of which this user is a member:
|
||||||
|
if not request.user.is_superuser:
|
||||||
|
found_items = found_items.filter(task_list__group__in=request.user.groups.all())
|
||||||
|
|
||||||
|
context = {
|
||||||
|
'query_string': query_string,
|
||||||
|
'found_items': found_items
|
||||||
|
}
|
||||||
|
return render(request, 'todo/search_results.html', context)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def external_add(request):
|
def external_add(request):
|
||||||
"""Allow users who don't have access to the rest of the ticket system to file a ticket in a specific list.
|
"""Allow users who don't have access to the rest of the ticket system to file a ticket in a specific list.
|
||||||
|
@ -258,64 +321,3 @@ def external_add(request):
|
||||||
form = AddExternalItemForm()
|
form = AddExternalItemForm()
|
||||||
|
|
||||||
return render(request, 'todo/add_task_external.html', locals())
|
return render(request, 'todo/add_task_external.html', locals())
|
||||||
|
|
||||||
|
|
||||||
@user_passes_test(check_user_allowed)
|
|
||||||
def add_list(request):
|
|
||||||
"""Allow users to add a new todo list to the group they're in.
|
|
||||||
"""
|
|
||||||
if request.POST:
|
|
||||||
form = AddTaskListForm(request.user, request.POST)
|
|
||||||
if form.is_valid():
|
|
||||||
try:
|
|
||||||
form.save()
|
|
||||||
messages.success(request, "A new list has been added.")
|
|
||||||
return redirect('todo:lists')
|
|
||||||
|
|
||||||
except IntegrityError:
|
|
||||||
messages.error(
|
|
||||||
request,
|
|
||||||
"There was a problem saving the new list. "
|
|
||||||
"Most likely a list with the same name in the same group already exists.")
|
|
||||||
else:
|
|
||||||
if request.user.groups.all().count() == 1:
|
|
||||||
form = AddTaskListForm(request.user, initial={"group": request.user.groups.all()[0]})
|
|
||||||
else:
|
|
||||||
form = AddTaskListForm(request.user)
|
|
||||||
|
|
||||||
return render(request, 'todo/add_list.html', locals())
|
|
||||||
|
|
||||||
|
|
||||||
@user_passes_test(check_user_allowed)
|
|
||||||
def search(request):
|
|
||||||
"""Search for tasks
|
|
||||||
"""
|
|
||||||
if request.GET:
|
|
||||||
|
|
||||||
query_string = ''
|
|
||||||
found_items = None
|
|
||||||
if ('q' in request.GET) and request.GET['q'].strip():
|
|
||||||
query_string = request.GET['q']
|
|
||||||
|
|
||||||
found_items = Item.objects.filter(
|
|
||||||
Q(title__icontains=query_string) |
|
|
||||||
Q(note__icontains=query_string)
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
|
|
||||||
# What if they selected the "completed" toggle but didn't type in a query string?
|
|
||||||
# We still need found_items in a queryset so it can be "excluded" below.
|
|
||||||
found_items = Item.objects.all()
|
|
||||||
|
|
||||||
if 'inc_complete' in request.GET:
|
|
||||||
found_items = found_items.exclude(completed=True)
|
|
||||||
|
|
||||||
else:
|
|
||||||
query_string = None
|
|
||||||
found_items = None
|
|
||||||
|
|
||||||
context = {
|
|
||||||
'query_string': query_string,
|
|
||||||
'found_items': found_items
|
|
||||||
}
|
|
||||||
return render(request, 'todo/search_results.html', context)
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue