-
{{ album.get_display_name() }}
+
{{ album.name }}
diff --git a/sas/tests/test_api.py b/sas/tests/test_api.py
index 6c074dd0..813c02a1 100644
--- a/sas/tests/test_api.py
+++ b/sas/tests/test_api.py
@@ -27,8 +27,8 @@ class TestSas(TestCase):
cls.user_b, cls.user_c = subscriber_user.make(_quantity=2)
picture = picture_recipe.extend(owner=owner)
- cls.album_a = baker.make(Album, is_in_sas=True, parent=sas)
- cls.album_b = baker.make(Album, is_in_sas=True, parent=sas)
+ cls.album_a = baker.make(Album)
+ cls.album_b = baker.make(Album)
relation_recipe = Recipe(PeoplePictureRelation)
relations = []
for album in cls.album_a, cls.album_b:
diff --git a/sas/views.py b/sas/views.py
index bc57249b..2ba8990a 100644
--- a/sas/views.py
+++ b/sas/views.py
@@ -12,6 +12,7 @@
# OR WITHIN THE LOCAL FILE "LICENSE"
#
#
+from pathlib import Path
from typing import Any
from django.conf import settings
@@ -26,7 +27,7 @@ from django.views.generic.edit import FormView, UpdateView
from core.auth.mixins import CanEditMixin, CanViewMixin
from core.models import SithFile, User
from core.views import UseFragmentsMixin
-from core.views.files import FileView, send_file
+from core.views.files import FileView, send_raw_file
from core.views.mixins import FragmentMixin, FragmentRenderer
from core.views.user import UserTabsMixin
from sas.forms import (
@@ -78,12 +79,24 @@ class SASMainView(UseFragmentsMixin, TemplateView):
root_user = User.objects.get(pk=settings.SITH_ROOT_USER_ID)
return {"album_create_fragment": {"owner": root_user}}
+ def post(self, request, *args, **kwargs):
+ self.form = self.get_form()
+ root = User.objects.filter(username="root").first()
+ if request.user.is_authenticated and request.user.is_in_group(
+ pk=settings.SITH_GROUP_SAS_ADMIN_ID
+ ):
+ if self.form.is_valid():
+ self.form.process(parent=None, owner=root, files=[], automodere=True)
+ if self.form.is_valid():
+ return super().form_valid(self.form)
+ else:
+ self.form.add_error(None, _("You do not have the permission to do that"))
+ return self.form_invalid(self.form)
+
def get_context_data(self, **kwargs):
kwargs = super().get_context_data(**kwargs)
- albums_qs = Album.objects.viewable_by(self.request.user)
- kwargs["categories"] = list(
- albums_qs.filter(parent_id=settings.SITH_SAS_ROOT_DIR_ID).order_by("id")
- )
+ albums_qs = Album.objects.annotate_is_moderated().viewable_by(self.request.user)
+ kwargs["categories"] = list(albums_qs.filter(parent=None).order_by("id"))
kwargs["latest"] = list(albums_qs.order_by("-id")[:5])
return kwargs
@@ -93,6 +106,9 @@ class PictureView(CanViewMixin, DetailView):
pk_url_kwarg = "picture_id"
template_name = "sas/picture.jinja"
+ def get_queryset(self):
+ return super().get_queryset().select_related("parent")
+
def get(self, request, *args, **kwargs):
self.object = self.get_object()
if "rotate_right" in request.GET:
@@ -102,25 +118,35 @@ class PictureView(CanViewMixin, DetailView):
return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
- return super().get_context_data(**kwargs) | {
- "album": Album.objects.get(children=self.object)
- }
+ return super().get_context_data(**kwargs) | {"album": self.object.parent}
def send_album(request, album_id):
- return send_file(request, album_id, Album)
+ album = get_object_or_404(Album, id=album_id)
+ if not album.can_be_viewed_by(request.user):
+ raise PermissionDenied
+ return send_raw_file(Path(album.thumbnail.path))
def send_pict(request, picture_id):
- return send_file(request, picture_id, Picture)
+ picture = get_object_or_404(Picture, id=picture_id)
+ if not picture.can_be_viewed_by(request.user):
+ raise PermissionDenied
+ return send_raw_file(Path(picture.original.path))
def send_compressed(request, picture_id):
- return send_file(request, picture_id, Picture, "compressed")
+ picture = get_object_or_404(Picture, id=picture_id)
+ if not picture.can_be_viewed_by(request.user):
+ raise PermissionDenied
+ return send_raw_file(Path(picture.compressed.path))
def send_thumb(request, picture_id):
- return send_file(request, picture_id, Picture, "thumbnail")
+ picture = get_object_or_404(Picture, id=picture_id)
+ if not picture.can_be_viewed_by(request.user):
+ raise PermissionDenied
+ return send_raw_file(Path(picture.thumbnail.path))
class AlbumView(CanViewMixin, UseFragmentsMixin, DetailView):
@@ -207,7 +233,7 @@ class ModerationView(TemplateView):
def get_context_data(self, **kwargs):
kwargs = super().get_context_data(**kwargs)
kwargs["albums_to_moderate"] = Album.objects.filter(
- is_moderated=False, is_in_sas=True, is_folder=True
+ is_moderated=False
).order_by("id")
pictures = Picture.objects.filter(is_moderated=False).select_related("parent")
kwargs["pictures"] = pictures