diff --git a/group/__init__.py b/group/__init__.py index e69de29bb2..2a357840f6 100644 --- a/group/__init__.py +++ b/group/__init__.py @@ -0,0 +1,5 @@ +from signals import * +from handlers import * +from models import GroupMessage + +grpmsg_added.connect(grpmsg_added_cb, sender=GroupMessage) diff --git a/group/handlers.py b/group/handlers.py new file mode 100644 index 0000000000..3cb1d7320e --- /dev/null +++ b/group/handlers.py @@ -0,0 +1,21 @@ +from seaserv import ccnet_threaded_rpc + +from signals import grpmsg_added +from seahub.notifications.models import UserNotification + +def grpmsg_added_cb(sender, **kwargs): + group_id = kwargs['group_id'] + from_email = kwargs['from_email'] + l = UserNotification.objects.filter(msg_type='group_msg', + detail=group_id) + if len(l) == 0: + group_members = ccnet_threaded_rpc.get_group_members(int(group_id)) + for m in group_members: + if from_email == m.user_name: + continue + n = UserNotification(to_user=m.user_name, msg_type='group_msg', + detail=group_id) + n.save() + else: + pass + diff --git a/group/models.py b/group/models.py index 79320b8331..31b40a0cb3 100644 --- a/group/models.py +++ b/group/models.py @@ -1,6 +1,8 @@ import datetime from django.db import models +from seahub.notifications.models import UserNotification + class GroupMessage(models.Model): group_id = models.IntegerField() from_email = models.EmailField() diff --git a/group/signals.py b/group/signals.py new file mode 100644 index 0000000000..c0c1089bd7 --- /dev/null +++ b/group/signals.py @@ -0,0 +1,3 @@ +import django.dispatch + +grpmsg_added = django.dispatch.Signal(providing_args=["group_id", "from_email"]) diff --git a/group/views.py b/group/views.py index 261f65b7e4..cf1c43d0c3 100644 --- a/group/views.py +++ b/group/views.py @@ -12,6 +12,7 @@ from pysearpc import SearpcError from models import GroupMessage, MessageReply from forms import MessageForm +from signals import grpmsg_added from seahub.contacts.models import Contact from seahub.notifications.models import UserNotification from seahub.utils import go_error, go_permission_error, validate_group_name @@ -140,7 +141,7 @@ def render_group_info(request, group_id, form): repos.append(repo) # remove user notifications - UserNotification.objects.filter(email=request.user.username, + UserNotification.objects.filter(to_user=request.user.username, detail=str(group_id)).delete() """group messages""" @@ -233,19 +234,10 @@ def group_info(request, group_id): # clear form data form = MessageForm() - - # add user notification if not exists - l = UserNotification.objects.filter(note_type='group_msg', - detail=group_id) - if len(l) == 0: - group_members = ccnet_threaded_rpc.get_group_members(int(group_id)) - for m in group_members: - if request.user.username == m.user_name: - continue - n = UserNotification(email=m.user_name, - note_type='group_msg', detail=group_id) - n.save() - + + # send signal + grpmsg_added.send(sender=GroupMessage, group_id=group_id, + from_email=request.user.username) else: form = MessageForm() diff --git a/notifications/models.py b/notifications/models.py index df62e473cf..c5d46387ef 100644 --- a/notifications/models.py +++ b/notifications/models.py @@ -6,9 +6,9 @@ class Notification(models.Model): primary = models.BooleanField(default=False) class UserNotification(models.Model): - email = models.EmailField(max_length=255) - note_type = models.CharField(max_length=30) - detail = models.CharField(max_length=100) + to_user = models.EmailField(max_length=255) + msg_type = models.CharField(max_length=30) + detail = models.TextField() class NotificationForm(ModelForm): """ diff --git a/views.py b/views.py index 06260bcbcb..930a377175 100644 --- a/views.py +++ b/views.py @@ -547,9 +547,9 @@ def myhome(request): # user notifications l = [] - notes = UserNotification.objects.filter(email=request.user.username) + notes = UserNotification.objects.filter(to_user=request.user.username) for n in notes: - if n.note_type == 'group_msg': + if n.msg_type == 'group_msg': l.append(n.detail) # my groups