From e657f2f45cfdd05d7731bf134cbb9e67d48d00ea Mon Sep 17 00:00:00 2001
From: Tom Teichler <tom.teichler@teckids.org>
Date: Thu, 16 Dec 2021 22:38:32 +0100
Subject: [PATCH] Use class-based view

---
 aleksis/core/urls.py  |  2 +-
 aleksis/core/views.py | 41 +++++++++++++++++++++++------------------
 2 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/aleksis/core/urls.py b/aleksis/core/urls.py
index 35fa106c1..753d95085 100644
--- a/aleksis/core/urls.py
+++ b/aleksis/core/urls.py
@@ -63,7 +63,7 @@ urlpatterns = [
     path("person/<int:id_>/", views.person, name="person_by_id"),
     path("person/<int:pk>/edit/", views.EditPersonView.as_view(), name="edit_person_by_id"),
     path("person/<int:id_>/delete/", views.delete_person, name="delete_person_by_id"),
-    path("person/<int:id_>/invite/", views.invite_person_by_id, name="invite_person_by_id"),
+    path("person/<int:id_>/invite/", views.InvitePersonByID.as_view(), name="invite_person_by_id"),
     path("groups", views.groups, name="groups"),
     path("groups/additional_fields", views.additional_fields, name="additional_fields"),
     path("groups/child_groups/", views.groups_child_groups, name="groups_child_groups"),
diff --git a/aleksis/core/views.py b/aleksis/core/views.py
index 8e7bc9a1d..69c1f565a 100644
--- a/aleksis/core/views.py
+++ b/aleksis/core/views.py
@@ -1410,27 +1410,32 @@ class AccountRegisterView(SignupView):
         return kwargs
 
 
-def invite_person_by_id(request: HttpRequest, id_: int) -> HttpResponse:
-    context = {}
+class InvitePersonByID(View):
+    """Custom view to invite person by it."""
 
-    person = Person.objects.get(id=id_)
+    success_url = reverse_lazy("persons")
 
-    if not PersonInvitation.objects.filter(email=person.email).exists():
-        length = get_site_preferences()["auth__invite_code_length"]
-        packet_size = get_site_preferences()["auth__invite_code_packet_size"]
-        key = generate_random_code(length, packet_size)
-        invite = PersonInvitation.objects.create(person=person, key=key)
-        if person.email:
-            invite.email = person.email
-        invite.inviter = request.user
-        invite.save()
-
-        invite.send_invitation(request)
-        messages.success(request, _("Person was invited successfully."))
-    else:
-        messages.success(request, _("Person was already invited."))
+    def get(self, request, *args, **kwargs):
+        self.object = self.get_object()
+        success_url = reverze_lazy("person_by_id", self.object.pk)
+        person = self.object
+
+        if not PersonInvitation.objects.filter(email=person.email).exists():
+            length = get_site_preferences()["auth__invite_code_length"]
+            packet_size = get_site_preferences()["auth__invite_code_packet_size"]
+            key = generate_random_code(length, packet_size)
+            invite = PersonInvitation.objects.create(person=person, key=key)
+            if person.email:
+                invite.email = person.email
+            invite.inviter = self.request.user
+            invite.save()
+
+            invite.send_invitation(self.request)
+            messages.success(self.request, _("Person was invited successfully."))
+        else:
+            messages.success(self.request, _("Person was already invited."))
 
-    return redirect("person_by_id", person.pk)
+        return HttpResponseRedirect(success_url)
 
 
 class LoginView(AllAuthLoginView):
-- 
GitLab