space stuff partially working

This commit is contained in:
vabene1111
2021-02-19 15:50:55 +01:00
parent c42266b82c
commit fb58d35029
8 changed files with 274 additions and 191 deletions

View File

@@ -16,6 +16,7 @@ from django.shortcuts import get_object_or_404, render, redirect
from django.urls import reverse, reverse_lazy
from django.utils import timezone
from django.utils.translation import gettext as _
from django_scopes import scopes_disabled, scope
from django_tables2 import RequestConfig
from rest_framework.authtoken.models import Token
@@ -33,10 +34,12 @@ from recipes.version import BUILD_REF, VERSION_NUMBER
def index(request):
if not request.user.is_authenticated:
if User.objects.count() < 1 and 'django.contrib.auth.backends.RemoteUserBackend' not in settings.AUTHENTICATION_BACKENDS:
return HttpResponseRedirect(reverse_lazy('view_setup'))
return HttpResponseRedirect(reverse_lazy('view_search'))
with scopes_disabled():
if not request.user.is_authenticated:
if User.objects.count() < 1 and 'django.contrib.auth.backends.RemoteUserBackend' not in settings.AUTHENTICATION_BACKENDS:
return HttpResponseRedirect(reverse_lazy('view_setup'))
return HttpResponseRedirect(reverse_lazy('view_search'))
try:
page_map = {
UserPreference.SEARCH: reverse_lazy('view_search'),
@@ -53,7 +56,7 @@ def search(request):
if has_group_permission(request.user, ('guest',)):
f = RecipeFilter(
request.GET,
queryset=Recipe.objects.all().order_by('name')
queryset=Recipe.objects.filter(space=request.user.userpreference.space).all().order_by('name')
)
if request.user.userpreference.search_style == UserPreference.LARGE:
@@ -63,10 +66,7 @@ def search(request):
RequestConfig(request, paginate={'per_page': 25}).configure(table)
if request.GET == {} and request.user.userpreference.show_recent:
qs = Recipe.objects \
.filter(viewlog__created_by=request.user) \
.order_by('-viewlog__created_at') \
.all()
qs = Recipe.objects.filter(viewlog__created_by=request.user).filter(space=request.user.userpreference.space).order_by('-viewlog__created_at').all()
recent_list = []
for r in qs:
@@ -79,11 +79,7 @@ def search(request):
else:
last_viewed = None
return render(
request,
'index.html',
{'recipes': table, 'filter': f, 'last_viewed': last_viewed}
)
return render(request, 'index.html', {'recipes': table, 'filter': f, 'last_viewed': last_viewed})
else:
return HttpResponseRedirect(reverse('view_no_group') + '?next=' + request.path)
@@ -97,17 +93,14 @@ def no_groups(request):
def recipe_view(request, pk, share=None):
recipe = get_object_or_404(Recipe, pk=pk)
with scopes_disabled():
recipe = get_object_or_404(Recipe, pk=pk)
if not has_group_permission(request.user, ('guest',)) and not share_link_valid(recipe, share):
messages.add_message(
request,
messages.ERROR,
_('You do not have the required permissions to view this page!')
)
if not (has_group_permission(request.user, ('guest',)) and recipe.space == request.space) and not share_link_valid(recipe, share):
messages.add_message(request, messages.ERROR, _('You do not have the required permissions to view this page!'))
return HttpResponseRedirect(reverse('view_no_group') + '?next=' + request.path)
comments = Comment.objects.filter(recipe=recipe)
comments = Comment.objects.filter(recipe__space=request.space, recipe=recipe)
if request.method == "POST":
if not request.user.is_authenticated:
@@ -146,17 +139,9 @@ def recipe_view(request, pk, share=None):
bookmark.save()
except IntegrityError as e:
if 'UNIQUE constraint' in str(e.args):
messages.add_message(
request,
messages.ERROR,
_('This recipe is already linked to the book!')
)
messages.add_message(request, messages.ERROR, _('This recipe is already linked to the book!'))
else:
messages.add_message(
request,
messages.SUCCESS,
_('Bookmark saved!')
)
messages.add_message(request, messages.SUCCESS, _('Bookmark saved!'))
comment_form = CommentForm()
@@ -165,20 +150,16 @@ def recipe_view(request, pk, share=None):
user_servings = CookLog.objects.filter(
recipe=recipe,
created_by=request.user,
servings__gt=0
servings__gt=0,
space=request.space,
).all().aggregate(Avg('servings'))['servings__avg']
if not user_servings:
user_servings = 0
if request.user.is_authenticated:
if not ViewLog.objects \
.filter(recipe=recipe) \
.filter(created_by=request.user) \
.filter(created_at__gt=(
timezone.now() - timezone.timedelta(minutes=5))) \
.exists():
ViewLog.objects.create(recipe=recipe, created_by=request.user)
if not ViewLog.objects.filter(recipe=recipe, created_by=request.user, created_at__gt=(timezone.now() - timezone.timedelta(minutes=5)), space=request.space).exists():
ViewLog.objects.create(recipe=recipe, created_by=request.user, space=request.space)
return render(request, 'recipe_view.html', {'recipe': recipe, 'comments': comments, 'comment_form': comment_form, 'share': share, 'user_servings': user_servings})
@@ -187,11 +168,9 @@ def recipe_view(request, pk, share=None):
def books(request):
book_list = []
books = RecipeBook.objects.filter(
Q(created_by=request.user) | Q(shared=request.user)
).distinct().all()
recipe_books = RecipeBook.objects.filter(Q(created_by=request.user) | Q(shared=request.user), space=request.space).distinct().all()
for b in books:
for b in recipe_books:
book_list.append(
{
'book': b,
@@ -209,32 +188,24 @@ def meal_plan(request):
@group_required('user')
def meal_plan_entry(request, pk):
plan = MealPlan.objects.get(pk=pk)
plan = MealPlan.objects.filter(space=request.space).get(pk=pk)
if plan.created_by != request.user and plan.shared != request.user:
messages.add_message(
request,
messages.ERROR,
_('You do not have the required permissions to view this page!')
)
messages.add_message(request, messages.ERROR, _('You do not have the required permissions to view this page!'))
return HttpResponseRedirect(reverse_lazy('index'))
same_day_plan = MealPlan.objects \
.filter(date=plan.date) \
.filter(date=plan.date, space=request.space) \
.exclude(pk=plan.pk) \
.filter(Q(created_by=request.user) | Q(shared=request.user)) \
.order_by('meal_type').all()
return render(
request,
'meal_plan_entry.html',
{'plan': plan, 'same_day_plan': same_day_plan}
)
return render(request, 'meal_plan_entry.html', {'plan': plan, 'same_day_plan': same_day_plan})
@group_required('user')
def latest_shopping_list(request):
sl = ShoppingList.objects.filter(Q(created_by=request.user) | Q(shared=request.user)).filter(finished=False).order_by('-created_at').first()
sl = ShoppingList.objects.filter(Q(created_by=request.user) | Q(shared=request.user)).filter(finished=False, space=request.space).order_by('-created_at').first()
if sl:
return HttpResponseRedirect(reverse('view_shopping', kwargs={'pk': sl.pk}) + '?edit=true')
@@ -251,7 +222,7 @@ def shopping_list(request, pk=None):
r = r.replace('[', '').replace(']', '')
if re.match(r'^([0-9])+,([0-9])+[.]*([0-9])*$', r):
rid, multiplier = r.split(',')
if recipe := Recipe.objects.filter(pk=int(rid)).first():
if recipe := Recipe.objects.filter(pk=int(rid), space=request.space).first():
recipes.append({'recipe': recipe.id, 'multiplier': multiplier})
edit = True if 'edit' in request.GET and request.GET['edit'] == 'true' else False
@@ -317,23 +288,19 @@ def user_settings(request):
if (api_token := Token.objects.filter(user=request.user).first()) is None:
api_token = Token.objects.create(user=request.user)
return render(
request,
'settings.html',
{
'preference_form': preference_form,
'user_name_form': user_name_form,
'password_form': password_form,
'api_token': api_token
}
)
return render(request, 'settings.html', {
'preference_form': preference_form,
'user_name_form': user_name_form,
'password_form': password_form,
'api_token': api_token
})
@group_required('guest')
def history(request):
view_log = ViewLogTable(
ViewLog.objects.filter(
created_by=request.user
created_by=request.user, space=request.space
).order_by('-created_at').all()
)
cook_log = CookLogTable(
@@ -341,11 +308,7 @@ def history(request):
created_by=request.user
).order_by('-created_at').all()
)
return render(
request,
'history.html',
{'view_log': view_log, 'cook_log': cook_log}
)
return render(request, 'history.html', {'view_log': view_log, 'cook_log': cook_log})
@group_required('admin')
@@ -357,28 +320,22 @@ def system(request):
secret_key = False if os.getenv('SECRET_KEY') else True
return render(
request,
'system.html',
{
'gunicorn_media': settings.GUNICORN_MEDIA,
'debug': settings.DEBUG,
'postgres': postgres,
'version': VERSION_NUMBER,
'ref': BUILD_REF,
'secret_key': secret_key
}
)
return render(request, 'system.html', {
'gunicorn_media': settings.GUNICORN_MEDIA,
'debug': settings.DEBUG,
'postgres': postgres,
'version': VERSION_NUMBER,
'ref': BUILD_REF,
'secret_key': secret_key
})
def setup(request):
if (User.objects.count() > 0
or 'django.contrib.auth.backends.RemoteUserBackend' in settings.AUTHENTICATION_BACKENDS): # noqa: E501
messages.add_message(
request,
messages.ERROR,
_('The setup page can only be used to create the first user! If you have forgotten your superuser credentials please consult the django documentation on how to reset passwords.') # noqa: E501
)
messages.add_message(request, messages.ERROR,
_('The setup page can only be used to create the first user! If you have forgotten your superuser credentials please consult the django documentation on how to reset passwords.') # noqa: E501
)
return HttpResponseRedirect(reverse('account_login'))
if request.method == 'POST':
@@ -415,14 +372,10 @@ def signup(request, token):
try:
token = UUID(token, version=4)
except ValueError:
messages.add_message(
request, messages.ERROR, _('Malformed Invite Link supplied!')
)
messages.add_message(request, messages.ERROR, _('Malformed Invite Link supplied!'))
return HttpResponseRedirect(reverse('index'))
if link := InviteLink.objects.filter(
valid_until__gte=datetime.today(), used_by=None, uuid=token) \
.first():
if link := InviteLink.objects.filter(valid_until__gte=datetime.today(), used_by=None, uuid=token).first():
if request.method == 'POST':
updated_request = request.POST.copy()
if link.username != '':