Intitial teams support #147
@ -2,6 +2,7 @@
|
|||||||
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
from django.db.models import Q
|
||||||
from django.shortcuts import get_object_or_404, redirect, reverse
|
from django.shortcuts import get_object_or_404, redirect, reverse
|
||||||
from django.views.generic import DetailView, ListView
|
from django.views.generic import DetailView, ListView
|
||||||
from django.views.generic.edit import CreateView, UpdateView, DeleteView, FormView
|
from django.views.generic.edit import CreateView, UpdateView, DeleteView, FormView
|
||||||
@ -99,7 +100,24 @@ class ManageListView(LoginRequiredMixin, ListView):
|
|||||||
template_name = 'extensions/manage/list.html'
|
template_name = 'extensions/manage/list.html'
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return Extension.objects.authored_by(user_id=self.request.user.pk)
|
filter = Q(maintainer__user_id=self.request.user.pk)
|
||||||
|
user_teams = self.request.user.teams.all()
|
||||||
|
if user_teams:
|
||||||
|
filter = filter | Q(team__in=[t.pk for t in user_teams])
|
||||||
|
return (
|
||||||
|
Extension.objects.filter(filter)
|
||||||
|
.prefetch_related(
|
||||||
|
'authors',
|
||||||
|
'preview_set',
|
||||||
|
'preview_set__file',
|
||||||
|
'ratings',
|
||||||
|
'team',
|
||||||
|
'versions',
|
||||||
|
'versions__file',
|
||||||
|
'versions__tags',
|
||||||
|
)
|
||||||
|
.distinct()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class UpdateExtensionView(
|
class UpdateExtensionView(
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
from django.contrib.auth.mixins import UserPassesTestMixin
|
from django.contrib.auth.mixins import UserPassesTestMixin
|
||||||
|
from django.db.models import Q
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
from extensions.models import Extension
|
from extensions.models import Extension
|
||||||
@ -31,8 +32,12 @@ class MaintainedExtensionMixin:
|
|||||||
"""Fetch an extension by slug if current user is a maintainer."""
|
"""Fetch an extension by slug if current user is a maintainer."""
|
||||||
|
|
||||||
def dispatch(self, *args, **kwargs):
|
def dispatch(self, *args, **kwargs):
|
||||||
|
filter = Q(maintainer__user_id=self.request.user.pk)
|
||||||
|
user_teams = self.request.user.teams.all()
|
||||||
|
if user_teams:
|
||||||
|
filter = filter | Q(team__in=[t.pk for t in user_teams])
|
||||||
self.extension = get_object_or_404(
|
self.extension = get_object_or_404(
|
||||||
Extension.objects.authored_by(user_id=self.request.user.pk),
|
Extension.objects.filter(filter),
|
||||||
slug=self.kwargs['slug'],
|
slug=self.kwargs['slug'],
|
||||||
)
|
)
|
||||||
return super().dispatch(*args, **kwargs)
|
return super().dispatch(*args, **kwargs)
|
||||||
|
@ -50,6 +50,7 @@ class HomeView(ListedExtensionsView):
|
|||||||
'preview_set',
|
'preview_set',
|
||||||
'preview_set__file',
|
'preview_set__file',
|
||||||
'ratings',
|
'ratings',
|
||||||
|
'team',
|
||||||
'versions',
|
'versions',
|
||||||
'versions__file',
|
'versions__file',
|
||||||
'versions__tags',
|
'versions__tags',
|
||||||
@ -107,6 +108,7 @@ class SearchView(ListedExtensionsView):
|
|||||||
'preview_set',
|
'preview_set',
|
||||||
'preview_set__file',
|
'preview_set__file',
|
||||||
'ratings',
|
'ratings',
|
||||||
|
'team',
|
||||||
'versions',
|
'versions',
|
||||||
'versions__file',
|
'versions__file',
|
||||||
'versions__tags',
|
'versions__tags',
|
||||||
|
Loading…
Reference in New Issue
Block a user