From 17dc3f7537e7a36368424a511abd542cb31e3681 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Wed, 12 Jan 2022 14:51:50 +0100 Subject: [PATCH] # 63 Mail celery * moves mail sending to celery worker using shared_task in konova/tasks.py * adds mail sending for shared access given * adds UserNotification settings checks for mail sending * adds/updates translations --- konova/models/object.py | 8 ++- konova/tasks.py | 9 ++- konova/utils/mailer.py | 24 ++++++- locale/de/LC_MESSAGES/django.mo | Bin 30761 -> 31667 bytes locale/de/LC_MESSAGES/django.po | 68 ++++++++++++++---- .../email/sharing/shared_access_given.html | 32 +++++++++ user/models/user.py | 26 ++++++- 7 files changed, 147 insertions(+), 20 deletions(-) create mode 100644 templates/email/sharing/shared_access_given.html diff --git a/konova/models/object.py b/konova/models/object.py index 6451fb8..65b0c1a 100644 --- a/konova/models/object.py +++ b/konova/models/object.py @@ -11,7 +11,7 @@ from abc import abstractmethod from django.contrib import messages -from konova.tasks import celery_send_mail_shared_access_removed +from konova.tasks import celery_send_mail_shared_access_removed, celery_send_mail_shared_access_given from user.models import User from django.core.exceptions import ObjectDoesNotExist from django.http import HttpRequest @@ -416,8 +416,14 @@ class ShareableObjectMixin(models.Model): removed_users = self.users.all().exclude( id__in=accessing_users ).values("id") + + # Send mails for user in removed_users: celery_send_mail_shared_access_removed.delay(self.identifier, user["id"]) + for user in new_accessing_users: + celery_send_mail_shared_access_given.delay(self.identifier, user) + + # Set new shared users self.share_with_list(users) diff --git a/konova/tasks.py b/konova/tasks.py index eb4e91d..5495683 100644 --- a/konova/tasks.py +++ b/konova/tasks.py @@ -22,4 +22,11 @@ def celery_update_parcels(geometry_id: str, recheck: bool = True): def celery_send_mail_shared_access_removed(obj_identifier, user_id): from user.models import User user = User.objects.get(id=user_id) - user.send_mail_shared_access_removed(obj_identifier) \ No newline at end of file + user.send_mail_shared_access_removed(obj_identifier) + + +@shared_task +def celery_send_mail_shared_access_given(obj_identifier, user_id): + from user.models import User + user = User.objects.get(id=user_id) + user.send_mail_shared_access_given(obj_identifier) \ No newline at end of file diff --git a/konova/utils/mailer.py b/konova/utils/mailer.py index f3f2efb..87ffe29 100644 --- a/konova/utils/mailer.py +++ b/konova/utils/mailer.py @@ -53,7 +53,7 @@ class Mailer: """ Send a mail if user has no access to the object anymore Args: - obj (): + obj_identifier (str): The object identifier Returns: @@ -71,3 +71,25 @@ class Mailer: msg ) + def send_mail_shared_access_given(self, obj_identifier, user): + """ Send a mail if user just got access to the object + + Args: + obj_identifier (str): The object identifier + + Returns: + + """ + context = { + "user": user, + "obj_identifier": obj_identifier, + "EMAIL_REPLY_TO": EMAIL_REPLY_TO, + } + msg = render_to_string("email/sharing/shared_access_given.html", context) + user_mail_address = [user.email] + self.send( + user_mail_address, + _("{} - Shared access given").format(obj_identifier), + msg + ) + diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 3143958dea20cdf80285e35243f4906d9e3b0fd0..d9103b58eb531b1082357e9d93bcffe4d12d9c29 100644 GIT binary patch delta 10214 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 diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 6527789..f1f99f9 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -26,7 +26,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-12 14:12+0100\n" +"POT-Creation-Date: 2022-01-12 14:31+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1757,6 +1757,10 @@ msgstr "Dokument '{}' gelöscht" msgid "{} - Shared access removed" msgstr "{} - Zugriff entzogen" +#: konova/utils/mailer.py:92 +msgid "{} - Shared access given" +msgstr "{} - Zugriff freigegeben" + #: konova/utils/message_templates.py:11 msgid "There was an error on this form." msgstr "Es gab einen Fehler im Formular." @@ -1871,32 +1875,66 @@ msgstr "Alle" msgid "News" msgstr "Neuigkeiten" -#: templates/email/sharing/shared_access_removed.html:2 -msgid "Shared access removed" -msgstr "Freigegebener Zugriff entzogen" +#: templates/email/sharing/shared_access_given.html:4 +msgid "Access shared" +msgstr "Zugriff freigegeben" -#: templates/email/sharing/shared_access_removed.html:6 +#: templates/email/sharing/shared_access_given.html:8 +#: templates/email/sharing/shared_access_removed.html:8 msgid "Hello " msgstr "Hallo " -#: templates/email/sharing/shared_access_removed.html:8 +#: templates/email/sharing/shared_access_given.html:10 +msgid "the following dataset has just been shared with you" +msgstr "der folgende Datensatz wurde soeben für Sie freigegeben " + +#: templates/email/sharing/shared_access_given.html:14 +msgid "This means you can now edit this dataset." +msgstr "Das bedeutet, dass Sie diesen Datensatz nun auch bearbeiten können." + +#: templates/email/sharing/shared_access_given.html:15 msgid "" -"your shared access, including editing, has been revoked for the dataset " +"The shared dataset appears now by default on your overview for this dataset " +"type." msgstr "" -"Ihnen wurde soeben der bearbeitende Zugriff auf den folgenden Datensatz entzogen: " - -#: templates/email/sharing/shared_access_removed.html:13 -msgid "However, you are still able to view the dataset content." -msgstr "Sie können den Datensatz aber immer noch im KSP einsehen." +"Der freigegebene Datensatz ist nun standardmäßig in Ihrer Übersicht für den Datensatztyp im KSP gelistet." -#: templates/email/sharing/shared_access_removed.html:14 -msgid "Please use the provided search filter on the dataset`s overview pages to find them." -msgstr "Nutzen Sie hierzu einfach die entsprechenden Suchfilter auf den Übersichtsseiten" +#: templates/email/sharing/shared_access_given.html:16 +msgid "" +"Please note: Shared access on an intervention means you automatically have " +"editing access to related compensations." +msgstr "" +"Bitte beachten Sie: Freigegebener Zugriff auf einen Eingriff bedeutet, dass Sie automatisch auch " +"Zugriff auf die zugehörigen Kompensationen erhalten haben." +#: templates/email/sharing/shared_access_given.html:19 #: templates/email/sharing/shared_access_removed.html:18 msgid "Best regards" msgstr "Beste Grüße" +#: templates/email/sharing/shared_access_removed.html:4 +msgid "Shared access removed" +msgstr "Freigegebener Zugriff entzogen" + +#: templates/email/sharing/shared_access_removed.html:10 +msgid "" +"your shared access, including editing, has been revoked for the dataset " +msgstr "" +"Ihnen wurde soeben der bearbeitende Zugriff auf den folgenden Datensatz " +"entzogen: " + +#: templates/email/sharing/shared_access_removed.html:14 +msgid "However, you are still able to view the dataset content." +msgstr "Sie können den Datensatz aber immer noch im KSP einsehen." + +#: templates/email/sharing/shared_access_removed.html:15 +msgid "" +"Please use the provided search filter on the dataset`s overview pages to " +"find them." +msgstr "" +"Nutzen Sie hierzu einfach die entsprechenden Suchfilter auf den " +"Übersichtsseiten" + #: templates/email/signature.html:6 msgid "Please do not reply on this mail." msgstr "Bitte antworten Sie nicht auf diese Mail." diff --git a/templates/email/sharing/shared_access_given.html b/templates/email/sharing/shared_access_given.html new file mode 100644 index 0000000..bf93e86 --- /dev/null +++ b/templates/email/sharing/shared_access_given.html @@ -0,0 +1,32 @@ +{% load i18n %} + +
+

{% trans 'Access shared' %}

+

{{obj_identifier}}

+
+
+ {% trans 'Hello ' %} {{user.username}}, +
+ {% trans 'the following dataset has just been shared with you' %} +
+ '{{obj_identifier}}' +
+ {% trans 'This means you can now edit this dataset.' %} + {% trans 'The shared dataset appears now by default on your overview for this dataset type.' %} +
+
+ {% trans 'Best regards' %} +
+ KSP +
+
+
+ + {% trans 'Please note: Shared access on an intervention means you automatically have editing access to related compensations.' %} + +
+
+ {% include 'email/signature.html' %} +
+
+ diff --git a/user/models/user.py b/user/models/user.py index c55896e..e8e6ae7 100644 --- a/user/models/user.py +++ b/user/models/user.py @@ -10,11 +10,17 @@ from django.contrib.auth.models import AbstractUser from django.db import models from konova.utils.mailer import Mailer +from user.enums import UserNotificationEnum class User(AbstractUser): notifications = models.ManyToManyField("user.UserNotification", related_name="+", blank=True) + def is_notification_setting_set(self, notification_enum: UserNotificationEnum): + return self.notifications.filter( + id=notification_enum.value + ).exists() + def send_mail_shared_access_removed(self, obj_identifier): """ Sends a mail to the user in case of removed shared access @@ -24,5 +30,21 @@ class User(AbstractUser): Returns: """ - mailer = Mailer() - mailer.send_mail_shared_access_removed(obj_identifier, self) + notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_ACCESS_REMOVED) + if notification_set: + mailer = Mailer() + mailer.send_mail_shared_access_removed(obj_identifier, self) + + def send_mail_shared_access_given(self, obj_identifier): + """ Sends a mail to the user in case of removed shared access + + Args: + obj (): + + Returns: + + """ + notification_set = self.is_notification_setting_set(UserNotificationEnum.NOTIFY_ON_SHARED_ACCESS_GAINED) + if notification_set: + mailer = Mailer() + mailer.send_mail_shared_access_given(obj_identifier, self)