Finally got authentication to somewhere I'm happy
This commit is contained in:
@@ -13,13 +13,18 @@ import json
|
||||
import os.path
|
||||
import re
|
||||
|
||||
from interface.views import EnsembleMixin, ProjectMixin
|
||||
from interface.views import EnsembleMixin, ProjectMixin, AuthorizedResourceMixin
|
||||
from interface.models import Project
|
||||
from library.models import Collection, Work, Document, Section
|
||||
from library.imslp import INSTRUMENT_TAGS, INSTRUMENTS
|
||||
from library import forms, models
|
||||
from library.pdf_utils import extract_pages, extract_and_concat
|
||||
|
||||
"""
|
||||
|
||||
"""
|
||||
|
||||
|
||||
class ProjectItemListView(ProjectMixin, ListView):
|
||||
template_name = "library/item_list.html"
|
||||
model = models.ProjectItem
|
||||
@@ -76,6 +81,7 @@ class ProjectItemListView(ProjectMixin, ListView):
|
||||
# data['running_time'] = "-:--"
|
||||
return data
|
||||
|
||||
|
||||
class ProjectItemManageView(ProjectMixin, ListView):
|
||||
template_name = "library/item_list_manage.html"
|
||||
model = models.ProjectItem
|
||||
@@ -109,25 +115,60 @@ class ProjectItemAddView(ProjectMixin, UpdateView):
|
||||
def get_object(self):
|
||||
return self.get_project()
|
||||
|
||||
class CollectionListView(EnsembleMixin, ListView):
|
||||
""" COLLECTION VIEWS """
|
||||
|
||||
class CollectionMixin(AuthorizedResourceMixin):
|
||||
def is_authorized(self):
|
||||
super().is_authorized()
|
||||
try:
|
||||
self.collection = self.get_collection()
|
||||
return True
|
||||
except (models.Collection.DoesNotExist, KeyError):
|
||||
return False
|
||||
|
||||
def get_queryset(self):
|
||||
return Collection.objects.filter(administrators=self.request.user)
|
||||
return super().get_queryset().filter(collection=self.collection)
|
||||
|
||||
def get_collection(self):
|
||||
collection = self.get_collection_queryset().get(pk=self.kwargs['collection'])
|
||||
self.request.is_admin = collection.has_administrator(self.request.user)
|
||||
return collection
|
||||
|
||||
class WorkListView(EnsembleMixin, ListView):
|
||||
def get_collection_queryset(self):
|
||||
collections = models.Collection.objects.all()
|
||||
|
||||
if self.request.user.is_anonymous:
|
||||
return models.Collection.objects.none()
|
||||
|
||||
if self.request.is_admin:
|
||||
return collections
|
||||
|
||||
return collections.filter(Q(administrators=self.request.user) | Q(allowed_ensembles__ensemble__admins=self.request.user))
|
||||
|
||||
class CollectionListView(CollectionMixin, ListView):
|
||||
paginate_by = 20
|
||||
|
||||
def is_authorized(self):
|
||||
return True
|
||||
|
||||
def get_queryset(self):
|
||||
return self.get_collection_queryset()
|
||||
|
||||
class WorkListView(CollectionMixin, ListView):
|
||||
paginate_by = 20
|
||||
|
||||
def get_works(self):
|
||||
return Work.objects.filter(collection__allowed_ensembles__ensemble=self.request.ensemble_id).order_by('name').distinct().select_related('collection')
|
||||
collections = CollectionMixin.get_queryset(self)
|
||||
return Work.objects.filter(collection__in=collections).order_by('name').distinct().select_related('collection')
|
||||
|
||||
def get_context_data(self, *args, **kwargs):
|
||||
data = super(WorkListView, self).get_context_data(*args, **kwargs)
|
||||
data['title'] = f'Music available to {self.ensemble.name}'
|
||||
#data['title'] = f'Music available to {self.ensemble.name}'
|
||||
data['title'] = "My Library"
|
||||
return data
|
||||
|
||||
def get_queryset(self):
|
||||
works = self.get_works().order_by('name')
|
||||
works = self.get_works()
|
||||
|
||||
q = self.request.GET.get('filter')
|
||||
if q:
|
||||
@@ -142,7 +183,7 @@ class WorkListView(EnsembleMixin, ListView):
|
||||
class CollectionWorkListView(WorkListView):
|
||||
|
||||
def get_works(self):
|
||||
works = Work.objects.filter(collection=self.kwargs['pk']).distinct()
|
||||
works = Work.objects.filter(collection=self.kwargs['collection']).distinct()
|
||||
|
||||
loan_count = Count('project_items', Q(project_items__checkout__lte=now(), project_items__returned=None))
|
||||
works = works.annotate(loan_count=loan_count)
|
||||
@@ -150,11 +191,10 @@ class CollectionWorkListView(WorkListView):
|
||||
|
||||
def get_context_data(self, *args, **kwargs):
|
||||
data = super(CollectionWorkListView, self).get_context_data(*args, **kwargs)
|
||||
data['title'] = Collection.objects.get(pk=self.kwargs['pk']).name
|
||||
data['collection_id'] = self.kwargs['pk']
|
||||
data['title'] = self.collection.name
|
||||
return data
|
||||
|
||||
class WorkAddView(EnsembleMixin, FormView):
|
||||
class WorkAddView(CollectionMixin, FormView):
|
||||
template_name = "interface/default_form.html"
|
||||
form_class = forms.WorkCreateForm
|
||||
|
||||
@@ -185,10 +225,10 @@ class WorkMixin(object):
|
||||
|
||||
return Work.objects.filter(collection__allowed_ensembles__ensemble=self.request.ensemble_id)
|
||||
|
||||
class WorkDetailView(EnsembleMixin, WorkMixin, DetailView):
|
||||
class WorkDetailView(CollectionMixin, WorkMixin, DetailView):
|
||||
pass
|
||||
|
||||
class WorkUpdateView(EnsembleMixin, WorkMixin, UpdateView):
|
||||
class WorkUpdateView(CollectionMixin, WorkMixin, UpdateView):
|
||||
fields = ['name', 'composer', 'edition', 'code', 'licence', 'max_projects', 'running_time', 'notes']
|
||||
template_name = 'interface/default_form.html'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user