-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/website/photos/views.py b/website/photos/views.py
index fbacbe92..fa5b7fb8 100644
--- a/website/photos/views.py
+++ b/website/photos/views.py
@@ -4,6 +4,7 @@ from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
from django.http import Http404
+from django.db.models import Q
from django.shortcuts import get_object_or_404, render
from sendfile import sendfile
@@ -17,10 +18,29 @@ COVER_FILENAME = 'cover.jpg'
@login_required
def index(request):
- albums = Album.objects.filter(hidden=False).order_by('-date')
+ if request.user.member is None:
+ raise Http404("Sorry, you're not a member")
+
+ albums_filter = Q()
+ # Check if the user currently has a membership
+ if request.user.member.current_membership is None:
+ # This is user is currently not a member
+ # so only show photos that were made during their membership
+ for membership in request.user.membership_set.all():
+ if membership.until is not None:
+ albums_filter |= (Q(date__gte=membership.since) & Q(
+ date__lte=membership.until))
+ else:
+ albums_filter |= (Q(date__gte=membership.since))
+
+ # Only show published albums
+ albums_filter = albums_filter & Q(hidden=False)
+ albums = Album.objects.filter(albums_filter).order_by('-date')
paginator = Paginator(albums, 12)
page = request.GET.get('page')
+ page = 1 if page is None or not page.isdigit() else int(page)
+
try:
albums = paginator.page(page)
except PageNotAnInteger:
@@ -29,14 +49,44 @@ def index(request):
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
albums = paginator.page(paginator.num_pages)
- return render(request, 'photos/index.html', {'albums': albums})
+
+ page_range = range(1, paginator.num_pages + 1)
+ if paginator.num_pages > 7:
+ if page > 3:
+ page_range_end = paginator.num_pages
+ if page + 3 <= paginator.num_pages:
+ page_range_end = page + 3
+
+ page_range = range(page - 2, page_range_end)
+ while page_range.stop - page_range.start < 5:
+ page_range = range(page_range.start - 1, page_range.stop)
+ else:
+ page_range = range(1, 6)
+
+ return render(request, 'photos/index.html', {'albums': albums,
+ 'page_range': page_range})
@login_required
def album(request, slug):
album = get_object_or_404(Album, slug=slug)
- context = {'album': album, 'photos': album.photo_set.filter(hidden=False)}
- return render(request, 'photos/album.html', context)
+ can_view = True
+
+ # Check if the user currently has a membership
+ if request.user.member.current_membership is None:
+ # This user is currently not a member, so need to check if he/she
+ # can view this album by checking the membership
+ filter = Q(since__lte=album.date) & (Q(until__gte=album.date) |
+ Q(until=None))
+ can_view = request.user.membership_set.filter(filter).count() > 0
+
+ if request.user.member is not None and can_view:
+ context = {
+ 'album': album,
+ 'photos': album.photo_set.filter(hidden=False)
+ }
+ return render(request, 'photos/album.html', context)
+ raise Http404("Sorry, you're not allowed to view this album")
def _checked_shared_album(slug, token):
--
GitLab