search form and help doc

This commit is contained in:
smilerz
2021-06-05 17:43:48 -05:00
parent 591591e3dc
commit 281149e247
9 changed files with 212 additions and 62 deletions

View File

@ -33,6 +33,8 @@ from cookbook.models import (Comment, CookLog, InviteLink, MealPlan,
from cookbook.tables import (CookLogTable, RecipeTable, RecipeTableSmall,
ViewLogTable)
from cookbook.views.data import Object
from recipes import settings
from recipes.settings import DEMO
from recipes.version import BUILD_REF, VERSION_NUMBER
@ -290,6 +292,8 @@ def user_settings(request):
up = request.user.userpreference
sp = request.user.searchpreference
search_error = False
active_tab = 'account'
user_name_form = UserNameForm(instance=request.user)
password_form = PasswordChangeForm(request.user)
@ -297,6 +301,7 @@ def user_settings(request):
if request.method == "POST":
if 'preference_form' in request.POST:
active_tab = 'preferences'
form = UserPreferenceForm(request.POST, prefix='preference')
if form.is_valid():
if not up:
@ -334,38 +339,62 @@ def user_settings(request):
update_session_auth_hash(request, user)
elif 'search_form' in request.POST:
active_tab = 'search'
search_form = SearchPreferenceForm(request.POST, prefix='search')
if form.is_valid():
if search_form.is_valid():
if not sp:
sp = search_form(user=request.user)
sp = SearchPreferenceForm(user=request.user)
fields_searched = (
len(search_form.cleaned_data['icontains'])
+ len(search_form.cleaned_data['istartswith'])
+ len(search_form.cleaned_data['trigram'])
+ len(search_form.cleaned_data['fulltext']))
# TODO add 'recommended' option
if fields_searched == 0:
search_form.add_error(None, _('You must select at least one field to search!'))
search_error = True
elif search_form.cleaned_data['search'] in ['websearch', 'raw'] and len(search_form.cleaned_data['fulltext']) == 0:
search_form.add_error('search', _('To use this search method you must select at least one full text search field!'))
search_error = True
elif search_form.cleaned_data['search'] in ['websearch', 'raw'] and len(search_form.cleaned_data['trigram']) > 0:
search_form.add_error(None, _('Fuzzy search is not compatible with this search method!'))
search_error = True
else:
sp.search = search_form.cleaned_data['search']
sp.unaccent.set(search_form.cleaned_data['unaccent'])
sp.icontains.set(search_form.cleaned_data['icontains'])
sp.istartswith.set(search_form.cleaned_data['istartswith'])
sp.trigram.set(search_form.cleaned_data['trigram'])
sp.fulltext.set(search_form.cleaned_data['fulltext'])
sp.search = search_form.cleaned_data['search']
sp.unaccent = search_form.cleaned_data['unaccent']
sp.icontains = search_form.cleaned_data['icontains']
sp.istartswith = search_form.cleaned_data['istartswith']
sp.trigram = search_form.cleaned_data['trigram']
sp.fulltext = search_form.cleaned_data['fulltext']
sp.save()
sp.save()
if up:
preference_form = UserPreferenceForm(instance=up)
else:
preference_form = UserPreferenceForm()
if sp:
preference_form = SearchPreferenceForm(instance=sp)
else:
preference_form = SearchPreferenceForm()
fields_searched = len(sp.icontains.all()) + len(sp.istartswith.all()) + len(sp.trigram.all()) + len(sp.fulltext.all())
if sp and not search_error and fields_searched > 0:
search_form = SearchPreferenceForm(instance=sp)
elif not search_error:
search_form = SearchPreferenceForm()
if (api_token := Token.objects.filter(user=request.user).first()) is None:
api_token = Token.objects.create(user=request.user)
# these fields require postgress - just disable them if postgress isn't available
if not settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', 'django.db.backends.postgresql']:
search_form.fields['search'].disabled = True
search_form.fields['trigram'].disabled = True
search_form.fields['fulltext'].disabled = True
return render(request, 'settings.html', {
'preference_form': preference_form,
'user_name_form': user_name_form,
'password_form': password_form,
'api_token': api_token,
'search_form': search_form
'search_form': search_form,
'active_tab': active_tab
})
@ -562,6 +591,10 @@ def markdown_info(request):
return render(request, 'markdown_info.html', {})
def search_info(request):
return render(request, 'search_info.html', {})
@group_required('guest')
def api_info(request):
return render(request, 'api_info.html', {})