2020-12-13 00:12:06 +01:00
|
|
|
from django.views.generic import (
|
|
|
|
TemplateView,
|
|
|
|
ListView,
|
|
|
|
DetailView,
|
|
|
|
RedirectView,
|
|
|
|
)
|
|
|
|
from django.views.generic.detail import SingleObjectMixin
|
|
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
|
|
from django.urls import reverse
|
|
|
|
from django.shortcuts import redirect, get_object_or_404
|
|
|
|
from django.contrib import messages
|
|
|
|
from django.http import Http404
|
|
|
|
from django.core.exceptions import PermissionDenied
|
2020-11-28 00:33:33 +01:00
|
|
|
from haystack.generic_views import SearchView
|
|
|
|
from haystack.forms import SearchForm
|
|
|
|
from haystack.query import SearchQuerySet
|
2020-12-13 00:12:06 +01:00
|
|
|
from .models import Category, Tag, Game, GameComment
|
2020-10-11 22:16:00 +02:00
|
|
|
|
|
|
|
|
2020-11-22 19:01:21 +01:00
|
|
|
class InventoryView(TemplateView):
|
2020-10-11 22:16:00 +02:00
|
|
|
template_name = "inventory/inventory.html"
|
|
|
|
|
|
|
|
|
2020-11-22 19:01:21 +01:00
|
|
|
class CategoryListView(ListView):
|
|
|
|
model = Category
|
|
|
|
template_name = "inventory/category_list.html"
|
|
|
|
|
|
|
|
|
|
|
|
class CategoryView(DetailView):
|
|
|
|
model = Category
|
|
|
|
template_name = "inventory/category.html"
|
|
|
|
|
|
|
|
|
|
|
|
class TagListView(ListView):
|
|
|
|
model = Tag
|
|
|
|
template_name = "inventory/tag_list.html"
|
|
|
|
|
|
|
|
|
|
|
|
class TagView(DetailView):
|
|
|
|
model = Tag
|
|
|
|
template_name = "inventory/tag.html"
|
|
|
|
|
|
|
|
|
|
|
|
class GameListView(ListView):
|
|
|
|
model = Game
|
|
|
|
template_name = "inventory/game_list.html"
|
|
|
|
|
|
|
|
|
2020-10-11 22:16:00 +02:00
|
|
|
class GameView(DetailView):
|
|
|
|
model = Game
|
|
|
|
template_name = "inventory/game.html"
|
2020-11-28 00:33:33 +01:00
|
|
|
|
|
|
|
|
|
|
|
class InventorySearchView(SearchView):
|
|
|
|
form_class = SearchForm
|
|
|
|
template_name = "inventory/search.html"
|
|
|
|
|
|
|
|
def get_queryset(self):
|
|
|
|
return SearchQuerySet().models(Category, Tag, Game)
|
2020-12-13 00:12:06 +01:00
|
|
|
|
|
|
|
|
|
|
|
class AddGameCommentView(LoginRequiredMixin, SingleObjectMixin, RedirectView):
|
|
|
|
model = Game
|
|
|
|
permanent = False
|
|
|
|
|
|
|
|
def get_redirect_url(self, *args, **kwargs):
|
|
|
|
req_dict = self.request.POST
|
|
|
|
if "comment_text" in req_dict:
|
|
|
|
comment_text = req_dict["comment_text"]
|
|
|
|
|
|
|
|
game = self.get_object()
|
|
|
|
game.comments.create(author=self.request.user, text=comment_text)
|
|
|
|
messages.success(self.request, "Commentaire ajouté")
|
|
|
|
else:
|
|
|
|
messages.error(
|
|
|
|
self.request, "Pas de texte pour le commentaire dans la requête"
|
|
|
|
)
|
|
|
|
|
|
|
|
return reverse("inventory:game", kwargs=kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
class ModifyGameCommentView(LoginRequiredMixin, SingleObjectMixin, TemplateView):
|
|
|
|
model = Game
|
|
|
|
template_name = "inventory/game.html"
|
|
|
|
|
|
|
|
def dispatch(self, *args, **kwargs):
|
|
|
|
comment_id = kwargs["comment_id"]
|
|
|
|
self.object = self.get_object()
|
|
|
|
self.comment = get_object_or_404(GameComment, id=comment_id)
|
|
|
|
if self.comment.game != self.object:
|
|
|
|
raise Http404()
|
|
|
|
if self.comment.author != self.request.user:
|
|
|
|
raise PermissionDenied()
|
|
|
|
return super().dispatch(*args, **kwargs)
|
|
|
|
|
|
|
|
def post(self, *args, **kwargs):
|
|
|
|
req_dict = self.request.POST
|
|
|
|
if "comment_text" in req_dict:
|
|
|
|
self.comment.text = req_dict["comment_text"]
|
|
|
|
self.comment.save()
|
|
|
|
messages.success(self.request, "Commentaire modifié")
|
|
|
|
else:
|
|
|
|
messages.error(
|
|
|
|
self.request, "Pas de texte pour le commentaire dans la requête"
|
|
|
|
)
|
|
|
|
return redirect("inventory:game", slug=kwargs["slug"])
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
context = super().get_context_data(**kwargs)
|
|
|
|
context["edited_comment"] = self.comment
|
|
|
|
return context
|