mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-11-20 13:36:05 -05:00
@@ -13,6 +13,7 @@ def stuff(request):
|
||||
ret["CAN_LOGIN"] = settings.LOGIN_ALLOWED
|
||||
ret["CAN_REGISTER"] = settings.REGISTER_ALLOWED
|
||||
ret["CAN_UPLOAD_MEDIA"] = settings.UPLOAD_MEDIA_ALLOWED
|
||||
ret["CAN_MENTION_IN_COMMENTS"] = settings.ALLOW_MENTION_IN_COMMENTS
|
||||
ret["CAN_LIKE_MEDIA"] = settings.CAN_LIKE_MEDIA
|
||||
ret["CAN_DISLIKE_MEDIA"] = settings.CAN_DISLIKE_MEDIA
|
||||
ret["CAN_REPORT_MEDIA"] = settings.CAN_REPORT_MEDIA
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
import itertools
|
||||
import logging
|
||||
import random
|
||||
import re
|
||||
from datetime import datetime
|
||||
|
||||
from django.conf import settings
|
||||
@@ -324,8 +325,6 @@ def update_user_ratings(user, media, user_ratings):
|
||||
|
||||
def notify_user_on_comment(friendly_token):
|
||||
"""Notify users through email, for a set of actions"""
|
||||
|
||||
media = None
|
||||
media = models.Media.objects.filter(friendly_token=friendly_token).first()
|
||||
if not media:
|
||||
return False
|
||||
@@ -347,6 +346,55 @@ View it on %s
|
||||
return True
|
||||
|
||||
|
||||
def notify_user_on_mention(friendly_token, user_mentioned, cleaned_comment):
|
||||
from users.models import User
|
||||
|
||||
media = models.Media.objects.filter(friendly_token=friendly_token).first()
|
||||
if not media:
|
||||
return False
|
||||
|
||||
user = User.objects.filter(username=user_mentioned).first()
|
||||
media_url = settings.SSL_FRONTEND_HOST + media.get_absolute_url()
|
||||
|
||||
if user.notification_on_comments:
|
||||
title = "[{}] - You were mentioned in a comment".format(settings.PORTAL_NAME)
|
||||
msg = """
|
||||
You were mentioned in a comment on %s .
|
||||
View it on %s
|
||||
|
||||
Comment : %s
|
||||
""" % (
|
||||
media.title,
|
||||
media_url,
|
||||
cleaned_comment,
|
||||
)
|
||||
email = EmailMessage(title, msg, settings.DEFAULT_FROM_EMAIL, [user.email])
|
||||
email.send(fail_silently=True)
|
||||
return True
|
||||
|
||||
|
||||
def check_comment_for_mention(friendly_token, comment_text):
|
||||
"""Check the comment for any mentions, and notify each mentioned users"""
|
||||
cleaned_comment = ''
|
||||
|
||||
matches = re.findall('@\\(_(.+?)_\\)', comment_text)
|
||||
if matches:
|
||||
cleaned_comment = clean_comment(comment_text)
|
||||
|
||||
for match in list(dict.fromkeys(matches)):
|
||||
notify_user_on_mention(friendly_token, match, cleaned_comment)
|
||||
|
||||
|
||||
def clean_comment(raw_comment):
|
||||
"""Clean the comment fromn ID and username Mentions for preview purposes"""
|
||||
|
||||
cleaned_comment = re.sub('@\\(_(.+?)_\\)', '', raw_comment)
|
||||
cleaned_comment = cleaned_comment.replace("[_", '')
|
||||
cleaned_comment = cleaned_comment.replace("_]", '')
|
||||
|
||||
return cleaned_comment
|
||||
|
||||
|
||||
def list_tasks():
|
||||
"""Lists celery tasks
|
||||
To be used in an admin dashboard
|
||||
|
||||
@@ -32,6 +32,7 @@ from users.models import User
|
||||
from .forms import ContactForm, MediaForm, SubtitleForm
|
||||
from .helpers import clean_query, produce_ffmpeg_commands
|
||||
from .methods import (
|
||||
check_comment_for_mention,
|
||||
get_user_or_session,
|
||||
is_mediacms_editor,
|
||||
is_mediacms_manager,
|
||||
@@ -1277,6 +1278,9 @@ class CommentDetail(APIView):
|
||||
serializer.save(user=request.user, media=media)
|
||||
if request.user != media.user:
|
||||
notify_user_on_comment(friendly_token=media.friendly_token)
|
||||
# here forward the comment to check if a user was mentioned
|
||||
if settings.ALLOW_MENTION_IN_COMMENTS:
|
||||
check_comment_for_mention(friendly_token=media.friendly_token, comment_text=serializer.data['text'])
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user