Séparation des vues messages
This commit is contained in:
parent
001a1652bd
commit
94950e148f
@ -36,7 +36,6 @@ from .views import (
|
||||
# General pages
|
||||
about,
|
||||
activite,
|
||||
delete_cm_spam,
|
||||
home,
|
||||
import_requirements,
|
||||
mentions_legales,
|
||||
@ -48,7 +47,6 @@ from .views import (
|
||||
add_import,
|
||||
cancel_import,
|
||||
update_orphan_events,
|
||||
view_messages,
|
||||
# Import récurrent
|
||||
RecurrentImportCreateView,
|
||||
RecurrentImportDeleteView,
|
||||
@ -58,6 +56,12 @@ from .views import (
|
||||
run_all_rimports,
|
||||
run_rimport,
|
||||
view_rimport,
|
||||
# Messages
|
||||
delete_cm_spam,
|
||||
MessageCreateView,
|
||||
MessageDeleteView,
|
||||
MessageUpdateView,
|
||||
view_messages,
|
||||
# Moderation
|
||||
EventModerateView,
|
||||
moderate_event_next,
|
||||
@ -69,15 +73,6 @@ from .views import (
|
||||
OrganisationDetailViewPast,
|
||||
OrganisationListView,
|
||||
OrganisationUpdateView,
|
||||
# Tags
|
||||
view_tag,
|
||||
view_tag_past,
|
||||
TagUpdateView,
|
||||
tag_list,
|
||||
TagDeleteView,
|
||||
rename_tag,
|
||||
delete_tag,
|
||||
TagCreateView,
|
||||
# Places
|
||||
PlaceCreateView,
|
||||
PlaceDeleteView,
|
||||
@ -93,6 +88,15 @@ from .views import (
|
||||
# Search
|
||||
event_search,
|
||||
event_search_full,
|
||||
# Tags
|
||||
view_tag,
|
||||
view_tag_past,
|
||||
TagUpdateView,
|
||||
tag_list,
|
||||
TagDeleteView,
|
||||
rename_tag,
|
||||
delete_tag,
|
||||
TagCreateView,
|
||||
# TODO pas encore trié
|
||||
week_view,
|
||||
month_view,
|
||||
@ -103,12 +107,10 @@ from .views import (
|
||||
administration,
|
||||
clear_cache,
|
||||
export_event_ical,
|
||||
MessageDeleteView,
|
||||
EventDetailView,
|
||||
EventUpdateView,
|
||||
StaticContentCreateView,
|
||||
StaticContentUpdateView,
|
||||
MessageCreateView,
|
||||
EventCreateView,
|
||||
update_from_source,
|
||||
change_status_event,
|
||||
@ -116,7 +118,6 @@ from .views import (
|
||||
import_event_proxy,
|
||||
import_from_url,
|
||||
import_from_urls,
|
||||
MessageUpdateView,
|
||||
UserProfileUpdateView,
|
||||
)
|
||||
|
||||
@ -191,14 +192,12 @@ urlpatterns = [
|
||||
# General pages
|
||||
path("a-propos", about, name="about"),
|
||||
path("activite/", activite, name="activite"),
|
||||
path("messages/spams/delete", delete_cm_spam, name="delete_cm_spam"),
|
||||
path("", home, name="home"),
|
||||
path("besoin-pour-import", import_requirements, name="import_requirements"),
|
||||
path("mentions-legales", mentions_legales, name="mentions_legales"),
|
||||
path("regles-de-moderation", moderation_rules, name="moderation_rules"),
|
||||
path("statistiques", statistics, name="statistics"),
|
||||
path("merci", thank_you, name="thank_you"),
|
||||
path("messages", view_messages, name="messages"),
|
||||
# Import batch
|
||||
path("imports/", imports, name="imports"),
|
||||
path("imports/add", add_import, name="add_import"),
|
||||
@ -235,6 +234,25 @@ urlpatterns = [
|
||||
),
|
||||
path("rimports/<int:pk>/run", run_rimport, name="run_rimport"),
|
||||
path("rimports/<int:pk>/view", view_rimport, name="view_rimport"),
|
||||
# Messages
|
||||
path("messages/spams/delete", delete_cm_spam, name="delete_cm_spam"),
|
||||
path(
|
||||
"event/<int:pk>/message",
|
||||
MessageCreateView.as_view(),
|
||||
name="message_for_event",
|
||||
),
|
||||
path("contact", MessageCreateView.as_view(), name="contact"),
|
||||
path(
|
||||
"message/<int:pk>/delete",
|
||||
MessageDeleteView.as_view(),
|
||||
name="delete_message",
|
||||
),
|
||||
path(
|
||||
"message/<int:pk>",
|
||||
MessageUpdateView.as_view(),
|
||||
name="message",
|
||||
),
|
||||
path("messages", view_messages, name="messages"),
|
||||
# Moderation
|
||||
path("moderate", EventModerateView.as_view(), name="moderate"),
|
||||
path(
|
||||
@ -358,6 +376,19 @@ urlpatterns = [
|
||||
# Search
|
||||
path("rechercher", event_search, name="event_search"),
|
||||
path("rechercher/complet/", event_search_full, name="event_search_full"),
|
||||
# Tags
|
||||
path("tag/<t>/", view_tag, name="view_tag"),
|
||||
path("tag/<t>/past", view_tag_past, name="view_tag_past"),
|
||||
path("tag/<int:pk>/edit", TagUpdateView.as_view(), name="edit_tag"),
|
||||
path("tags/", tag_list, name="view_all_tags"),
|
||||
path(
|
||||
"tag/<int:pk>/delete",
|
||||
TagDeleteView.as_view(),
|
||||
name="delete_object_tag",
|
||||
),
|
||||
path("tag/<t>/rename", rename_tag, name="rename_tag"),
|
||||
path("tag/<t>/delete", delete_tag, name="delete_tag"),
|
||||
path("tags/add", TagCreateView.as_view(), name="add_tag"),
|
||||
# TODO pas encore trié
|
||||
path("cat:<cat>/", home, name="home_category"),
|
||||
path(
|
||||
@ -400,19 +431,7 @@ urlpatterns = [
|
||||
),
|
||||
path("cette-semaine/", week_view, name="cette_semaine"),
|
||||
path("ce-mois-ci", month_view, name="ce_mois_ci"),
|
||||
path("tag/<t>/", view_tag, name="view_tag"),
|
||||
path("tag/<tag>/ical", export_ical, name="export_ical_tag"),
|
||||
path("tag/<t>/past", view_tag_past, name="view_tag_past"),
|
||||
path("tags/", tag_list, name="view_all_tags"),
|
||||
path("tag/<int:pk>/edit", TagUpdateView.as_view(), name="edit_tag"),
|
||||
path(
|
||||
"tag/<int:pk>/delete",
|
||||
TagDeleteView.as_view(),
|
||||
name="delete_object_tag",
|
||||
),
|
||||
path("tag/<t>/rename", rename_tag, name="rename_tag"),
|
||||
path("tag/<t>/delete", delete_tag, name="delete_tag"),
|
||||
path("tags/add", TagCreateView.as_view(), name="add_tag"),
|
||||
path("recent/", recent, name="recent"),
|
||||
path("administration/", administration, name="administration"),
|
||||
path(
|
||||
@ -435,11 +454,6 @@ urlpatterns = [
|
||||
EventUpdateView.as_view(),
|
||||
name="clone_edit",
|
||||
),
|
||||
path(
|
||||
"event/<int:pk>/message",
|
||||
MessageCreateView.as_view(),
|
||||
name="message_for_event",
|
||||
),
|
||||
path(
|
||||
"event/<int:pk>/update-from-source",
|
||||
update_from_source,
|
||||
@ -468,17 +482,6 @@ urlpatterns = [
|
||||
StaticContentUpdateView.as_view(),
|
||||
name="edit_static_content",
|
||||
),
|
||||
path("contact", MessageCreateView.as_view(), name="contact"),
|
||||
path(
|
||||
"message/<int:pk>",
|
||||
MessageUpdateView.as_view(),
|
||||
name="message",
|
||||
),
|
||||
path(
|
||||
"message/<int:pk>/delete",
|
||||
MessageDeleteView.as_view(),
|
||||
name="delete_message",
|
||||
),
|
||||
path("rimports/<int:pk>/stats", statistics, name="stats_rimport"),
|
||||
path(
|
||||
"organisme/<int:organisation_pk>/ical",
|
||||
|
@ -5,6 +5,7 @@ from .errors import *
|
||||
from .general_pages_views import *
|
||||
from .import_batch_views import *
|
||||
from .import_recurrent_views import *
|
||||
from .message_views import *
|
||||
from .moderation_views import *
|
||||
from .organisations_views import *
|
||||
from .places_views import *
|
||||
|
@ -2,19 +2,15 @@ import calendar as _calendar
|
||||
from datetime import date, timedelta, datetime
|
||||
|
||||
from django.contrib.auth.decorators import login_required, permission_required
|
||||
from django.core.checks import messages
|
||||
from django.core.paginator import PageNotAnInteger, EmptyPage
|
||||
from django.db.models import Count, F
|
||||
from django.db.models import Q, Min, Max, Avg, StdDev
|
||||
from django.db.models.functions import TruncMonth, ExtractDay
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import render
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from . import Median, week_view, PaginatorFilter
|
||||
from ..filters import MessagesFilterAdmin
|
||||
from ..models import RecurrentImport, Event, Message
|
||||
from . import Median, week_view
|
||||
from ..models import RecurrentImport, Event
|
||||
|
||||
|
||||
def home(request, cat=None):
|
||||
@ -202,52 +198,3 @@ def activite(request):
|
||||
"weekly_modifications": weekly_modifications,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@login_required(login_url="/accounts/login/")
|
||||
@permission_required("agenda_culturel.view_message")
|
||||
def view_messages(request):
|
||||
filter = MessagesFilterAdmin(
|
||||
request.GET, queryset=Message.objects.all().order_by("-date")
|
||||
)
|
||||
paginator = PaginatorFilter(filter, 10, request)
|
||||
page = request.GET.get("page")
|
||||
|
||||
nb_spams = Message.objects.filter(spam=True).count()
|
||||
|
||||
try:
|
||||
response = paginator.page(page)
|
||||
except PageNotAnInteger:
|
||||
response = paginator.page(1)
|
||||
except EmptyPage:
|
||||
response = paginator.page(paginator.num_pages)
|
||||
|
||||
return render(
|
||||
request,
|
||||
"agenda_culturel/messages.html",
|
||||
{"filter": filter, "nb_spams": nb_spams, "paginator_filter": response},
|
||||
)
|
||||
|
||||
|
||||
@login_required(login_url="/accounts/login/")
|
||||
@permission_required("agenda_culturel.view_message")
|
||||
def delete_cm_spam(request):
|
||||
if request.method == "POST":
|
||||
Message.objects.filter(spam=True).delete()
|
||||
|
||||
messages.success(request, _("Spam has been successfully deleted."))
|
||||
return HttpResponseRedirect(reverse_lazy("messages"))
|
||||
else:
|
||||
nb_msgs = Message.objects.values("spam").annotate(total=Count("spam"))
|
||||
nb_total = sum([nb["total"] for nb in nb_msgs])
|
||||
nb_spams = sum([nb["total"] for nb in nb_msgs if nb["spam"]])
|
||||
cancel_url = reverse_lazy("messages")
|
||||
return render(
|
||||
request,
|
||||
"agenda_culturel/delete_spams_confirm.html",
|
||||
{
|
||||
"nb_total": nb_total,
|
||||
"nb_spams": nb_spams,
|
||||
"cancel_url": cancel_url,
|
||||
},
|
||||
)
|
||||
|
146
src/agenda_culturel/views/message_views.py
Normal file
146
src/agenda_culturel/views/message_views.py
Normal file
@ -0,0 +1,146 @@
|
||||
from django.contrib.auth.decorators import login_required, permission_required
|
||||
from django.contrib.auth.mixins import PermissionRequiredMixin, LoginRequiredMixin
|
||||
from django.contrib.messages.views import SuccessMessageMixin
|
||||
from django.core.checks import messages
|
||||
from django.core.paginator import PageNotAnInteger, EmptyPage
|
||||
from django.db.models import Count
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views.generic import DeleteView, UpdateView, CreateView
|
||||
from honeypot.decorators import check_honeypot
|
||||
|
||||
from . import PaginatorFilter
|
||||
from ..filters import MessagesFilterAdmin
|
||||
from ..forms import MessageForm
|
||||
from ..models import Event, Message
|
||||
|
||||
|
||||
@method_decorator(check_honeypot, name="post")
|
||||
class MessageCreateView(SuccessMessageMixin, CreateView):
|
||||
model = Message
|
||||
template_name = "agenda_culturel/message_create_form.html"
|
||||
form_class = MessageForm
|
||||
|
||||
success_url = reverse_lazy("home")
|
||||
success_message = _("Your message has been sent successfully.")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.event = None
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def get_form(self, form_class=None):
|
||||
if form_class is None:
|
||||
form_class = self.get_form_class()
|
||||
return form_class(**self.get_form_kwargs())
|
||||
|
||||
def get_form_kwargs(self):
|
||||
kwargs = super().get_form_kwargs()
|
||||
kwargs["event"] = self.event
|
||||
if self.request.user.is_authenticated:
|
||||
kwargs["internal"] = True
|
||||
return kwargs
|
||||
|
||||
def form_valid(self, form):
|
||||
if self.request.user.is_authenticated:
|
||||
form.instance.user = self.request.user
|
||||
form.instance.message_type = (
|
||||
Message.TYPE.EVENT_REPORT
|
||||
if "pk" in self.kwargs
|
||||
else Message.TYPE.CONTACT_FORM
|
||||
)
|
||||
return super().form_valid(form)
|
||||
|
||||
def get_initial(self):
|
||||
result = super().get_initial()
|
||||
if "pk" in self.kwargs:
|
||||
self.event = get_object_or_404(Event, pk=self.kwargs["pk"])
|
||||
result["related_event"] = self.event
|
||||
result["subject"] = _("Reporting the event {} on {}").format(
|
||||
self.event.title, self.event.start_day
|
||||
)
|
||||
else:
|
||||
result["related_event"] = None
|
||||
return result
|
||||
|
||||
|
||||
class MessageDeleteView(SuccessMessageMixin, DeleteView):
|
||||
model = Message
|
||||
success_message = _("The contact message has been successfully deleted.")
|
||||
success_url = reverse_lazy("messages")
|
||||
|
||||
|
||||
class MessageUpdateView(
|
||||
SuccessMessageMixin,
|
||||
PermissionRequiredMixin,
|
||||
LoginRequiredMixin,
|
||||
UpdateView,
|
||||
):
|
||||
model = Message
|
||||
permission_required = "agenda_culturel.change_message"
|
||||
template_name = "agenda_culturel/message_moderation_form.html"
|
||||
fields = ("spam", "closed", "comments")
|
||||
|
||||
success_message = _(
|
||||
"The contact message properties has been successfully modified."
|
||||
)
|
||||
|
||||
success_url = reverse_lazy("messages")
|
||||
|
||||
def get_form_kwargs(self):
|
||||
"""Return the keyword arguments for instantiating the form."""
|
||||
kwargs = super().get_form_kwargs()
|
||||
if hasattr(self, "object"):
|
||||
kwargs.update({"instance": self.object})
|
||||
return kwargs
|
||||
|
||||
|
||||
@login_required(login_url="/accounts/login/")
|
||||
@permission_required("agenda_culturel.view_message")
|
||||
def view_messages(request):
|
||||
filter = MessagesFilterAdmin(
|
||||
request.GET, queryset=Message.objects.all().order_by("-date")
|
||||
)
|
||||
paginator = PaginatorFilter(filter, 10, request)
|
||||
page = request.GET.get("page")
|
||||
|
||||
nb_spams = Message.objects.filter(spam=True).count()
|
||||
|
||||
try:
|
||||
response = paginator.page(page)
|
||||
except PageNotAnInteger:
|
||||
response = paginator.page(1)
|
||||
except EmptyPage:
|
||||
response = paginator.page(paginator.num_pages)
|
||||
|
||||
return render(
|
||||
request,
|
||||
"agenda_culturel/messages.html",
|
||||
{"filter": filter, "nb_spams": nb_spams, "paginator_filter": response},
|
||||
)
|
||||
|
||||
|
||||
@login_required(login_url="/accounts/login/")
|
||||
@permission_required("agenda_culturel.view_message")
|
||||
def delete_cm_spam(request):
|
||||
if request.method == "POST":
|
||||
Message.objects.filter(spam=True).delete()
|
||||
|
||||
messages.success(request, _("Spam has been successfully deleted."))
|
||||
return HttpResponseRedirect(reverse_lazy("messages"))
|
||||
else:
|
||||
nb_msgs = Message.objects.values("spam").annotate(total=Count("spam"))
|
||||
nb_total = sum([nb["total"] for nb in nb_msgs])
|
||||
nb_spams = sum([nb["total"] for nb in nb_msgs if nb["spam"]])
|
||||
cancel_url = reverse_lazy("messages")
|
||||
return render(
|
||||
request,
|
||||
"agenda_culturel/delete_spams_confirm.html",
|
||||
{
|
||||
"nb_total": nb_total,
|
||||
"nb_spams": nb_spams,
|
||||
"cancel_url": cancel_url,
|
||||
},
|
||||
)
|
@ -22,7 +22,6 @@ from django.http import (
|
||||
)
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
from django.urls import reverse, reverse_lazy
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.utils.html import escape
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.timezone import datetime
|
||||
@ -34,7 +33,6 @@ from django.views.generic.edit import (
|
||||
ModelFormMixin,
|
||||
UpdateView,
|
||||
)
|
||||
from honeypot.decorators import check_honeypot
|
||||
|
||||
from .utils import get_event_qs
|
||||
from ..calendar import CalendarList, CalendarMonth, CalendarWeek
|
||||
@ -50,7 +48,6 @@ from ..forms import (
|
||||
EventForm,
|
||||
EventFormWithContact,
|
||||
MessageEventForm,
|
||||
MessageForm,
|
||||
SimpleContactForm,
|
||||
URLSubmissionFormSet,
|
||||
URLSubmissionFormWithContact,
|
||||
@ -919,85 +916,6 @@ def export_ical(request, cat=None, tag=None, organisation_pk=None, place_pk=None
|
||||
return response
|
||||
|
||||
|
||||
@method_decorator(check_honeypot, name="post")
|
||||
class MessageCreateView(SuccessMessageMixin, CreateView):
|
||||
model = Message
|
||||
template_name = "agenda_culturel/message_create_form.html"
|
||||
form_class = MessageForm
|
||||
|
||||
success_url = reverse_lazy("home")
|
||||
success_message = _("Your message has been sent successfully.")
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.event = None
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def get_form(self, form_class=None):
|
||||
if form_class is None:
|
||||
form_class = self.get_form_class()
|
||||
return form_class(**self.get_form_kwargs())
|
||||
|
||||
def get_form_kwargs(self):
|
||||
kwargs = super().get_form_kwargs()
|
||||
kwargs["event"] = self.event
|
||||
if self.request.user.is_authenticated:
|
||||
kwargs["internal"] = True
|
||||
return kwargs
|
||||
|
||||
def form_valid(self, form):
|
||||
if self.request.user.is_authenticated:
|
||||
form.instance.user = self.request.user
|
||||
form.instance.message_type = (
|
||||
Message.TYPE.EVENT_REPORT
|
||||
if "pk" in self.kwargs
|
||||
else Message.TYPE.CONTACT_FORM
|
||||
)
|
||||
return super().form_valid(form)
|
||||
|
||||
def get_initial(self):
|
||||
result = super().get_initial()
|
||||
if "pk" in self.kwargs:
|
||||
self.event = get_object_or_404(Event, pk=self.kwargs["pk"])
|
||||
result["related_event"] = self.event
|
||||
result["subject"] = _("Reporting the event {} on {}").format(
|
||||
self.event.title, self.event.start_day
|
||||
)
|
||||
else:
|
||||
result["related_event"] = None
|
||||
return result
|
||||
|
||||
|
||||
class MessageDeleteView(SuccessMessageMixin, DeleteView):
|
||||
model = Message
|
||||
success_message = _("The contact message has been successfully deleted.")
|
||||
success_url = reverse_lazy("messages")
|
||||
|
||||
|
||||
class MessageUpdateView(
|
||||
SuccessMessageMixin,
|
||||
PermissionRequiredMixin,
|
||||
LoginRequiredMixin,
|
||||
UpdateView,
|
||||
):
|
||||
model = Message
|
||||
permission_required = "agenda_culturel.change_message"
|
||||
template_name = "agenda_culturel/message_moderation_form.html"
|
||||
fields = ("spam", "closed", "comments")
|
||||
|
||||
success_message = _(
|
||||
"The contact message properties has been successfully modified."
|
||||
)
|
||||
|
||||
success_url = reverse_lazy("messages")
|
||||
|
||||
def get_form_kwargs(self):
|
||||
"""Return the keyword arguments for instantiating the form."""
|
||||
kwargs = super().get_form_kwargs()
|
||||
if hasattr(self, "object"):
|
||||
kwargs.update({"instance": self.object})
|
||||
return kwargs
|
||||
|
||||
|
||||
@login_required(login_url="/accounts/login/")
|
||||
@permission_required("agenda_culturel.view_event")
|
||||
def administration(request):
|
||||
|
Loading…
x
Reference in New Issue
Block a user