Quellcode durchsuchen

Merge pull request #6 from mediacms-io/feat-notifications

provide notifications on commenting
Markos Gogoulos vor 4 Jahren
Ursprung
Commit
3e2ff1e22d
5 geänderte Dateien mit 42 neuen und 13 gelöschten Zeilen
  1. 2 2
      cms/permissions.py
  2. 2 1
      cms/settings.py
  3. 29 9
      files/methods.py
  4. 8 0
      files/models.py
  5. 1 1
      files/views.py

+ 2 - 2
cms/permissions.py

@@ -24,7 +24,7 @@ class IsUserOrManager(permissions.BasePermission):
         if is_mediacms_manager(request.user):
             return True
 
-        return obj == request.user
+        return obj.user == request.user
 
 
 class IsUserOrEditor(permissions.BasePermission):
@@ -41,7 +41,7 @@ class IsUserOrEditor(permissions.BasePermission):
         if is_mediacms_editor(request.user):
             return True
 
-        return obj == request.user
+        return obj.user == request.user
 
 
 def user_allowed_to_upload(request):

+ 2 - 1
cms/settings.py

@@ -173,7 +173,8 @@ MINIMUM_RESOLUTIONS_TO_ENCODE = [240, 360]
 USERS_NOTIFICATIONS = {
     "MEDIA_ADDED": True,  # in use
     "MEDIA_ENCODED": False,  # not implemented
-    "MEDIA_REPORTED": False,  # not implemented
+    "MEDIA_REPORTED": True,  # in use
+    "COMMENT_ADDED": True,  # in use
 }
 
 ADMINS_NOTIFICATIONS = {

+ 29 - 9
files/methods.py

@@ -149,22 +149,32 @@ def notify_users(friendly_token=None, action=None, extra=None):
         media_url = settings.SSL_FRONTEND_HOST + media.get_absolute_url()
 
     if action == "media_reported" and media:
-        if settings.ADMINS_NOTIFICATIONS.get("MEDIA_REPORTED", False):
-            title = "[{}] - Media was reported".format(settings.PORTAL_NAME)
-            msg = """
+        msg = """
 Media %s was reported.
 Reason: %s\n
-Total times this media has been reported: %s
-            """ % (
-                media_url,
-                extra,
-                media.reported_times,
-            )
+Total times this media has been reported: %s\n
+Media becomes private if it gets reported %s times\n
+        """ % (
+            media_url,
+            extra,
+            media.reported_times,
+            settings.REPORTED_TIMES_THRESHOLD,
+        )
+
+        if settings.ADMINS_NOTIFICATIONS.get("MEDIA_REPORTED", False):
+            title = "[{}] - Media was reported".format(settings.PORTAL_NAME)
             d = {}
             d["title"] = title
             d["msg"] = msg
             d["to"] = settings.ADMIN_EMAIL_LIST
             notify_items.append(d)
+        if settings.USERS_NOTIFICATIONS.get("MEDIA_REPORTED", False):
+            title = "[{}] - Media was reported".format(settings.PORTAL_NAME)
+            d = {}
+            d["title"] = title
+            d["msg"] = msg
+            d["to"] = [media.user.email]
+            notify_items.append(d)
 
     if action == "media_added" and media:
         if settings.ADMINS_NOTIFICATIONS.get("MEDIA_ADDED", False):
@@ -194,6 +204,16 @@ URL: %s
             d["to"] = [media.user.email]
             notify_items.append(d)
 
+    if action == "comment_added" and media:
+        if settings.USERS_NOTIFICATIONS.get("COMMENT_ADDED", False):
+            d = {}
+            title = f"[{settings.PORTAL_NAME}] - Comment was added"
+            msg = f"A comment was added on media {media_url}\n"
+            d["title"] = title
+            d["msg"] = msg
+            d["to"] = [media.user.username]
+            notify_items.append(d)
+
     for item in notify_items:
         email = EmailMessage(
             item["title"], item["msg"], settings.DEFAULT_FROM_EMAIL, item["to"]

+ 8 - 0
files/models.py

@@ -1712,3 +1712,11 @@ def encoding_file_delete(sender, instance, **kwargs):
             instance.media.post_encode_actions(encoding=instance, action="delete")
     # delete local chunks, and remote chunks + media file. Only when the
     # last encoding of a media is complete
+
+
+@receiver(post_save, sender=Comment)
+def comment_save(sender, instance, created, **kwargs):
+    if created:
+        notify_users(
+            friendly_token=instance.media.friendly_token, action="comment_added"
+        )

+ 1 - 1
files/views.py

@@ -1112,7 +1112,7 @@ class CommentDetail(APIView):
     Delete comment (DELETE)
     """
 
-    permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsUserOrEditor)
+    permission_classes = (IsAuthorizedToAdd,)
     parser_classes = (JSONParser, MultiPartParser, FormParser, FileUploadParser)
 
     def get_object(self, friendly_token):