diff --git a/group/__init__.py b/group/__init__.py index 2a357840f6..9bceb11b38 100644 --- a/group/__init__.py +++ b/group/__init__.py @@ -1,5 +1,6 @@ from signals import * from handlers import * -from models import GroupMessage +from models import GroupMessage, MessageReply grpmsg_added.connect(grpmsg_added_cb, sender=GroupMessage) +grpmsg_reply_added.connect(grpmsg_reply_added_cb, sender=MessageReply) diff --git a/group/handlers.py b/group/handlers.py index 1a8452f6e9..b7511895fa 100644 --- a/group/handlers.py +++ b/group/handlers.py @@ -1,6 +1,7 @@ from seaserv import ccnet_threaded_rpc from signals import grpmsg_added +from models import GroupMessage from seahub.notifications.models import UserNotification def grpmsg_added_cb(sender, **kwargs): @@ -18,3 +19,24 @@ def grpmsg_added_cb(sender, **kwargs): n = UserNotification(to_user=m.user_name, msg_type='group_msg', detail=group_id) n.save() + +def grpmsg_reply_added_cb(sender, **kwargs): + msg_id = kwargs['msg_id'] + reply_from_email = kwargs['from_email'] # this value may be used in future + try: + group_msg = GroupMessage.objects.get(id=msg_id) + except GroupMessage.DoesNotExist: + pass + + try: + UserNotification.objects.get(to_user=group_msg.from_email, + msg_type='grpmsg_reply', + detail=msg_id) + except UserNotification.DoesNotExist: + n = UserNotification(to_user=group_msg.from_email, + msg_type='grpmsg_reply', + detail=msg_id) + n.save() + + + diff --git a/group/signals.py b/group/signals.py index c0c1089bd7..be5033c775 100644 --- a/group/signals.py +++ b/group/signals.py @@ -1,3 +1,4 @@ import django.dispatch grpmsg_added = django.dispatch.Signal(providing_args=["group_id", "from_email"]) +grpmsg_reply_added = django.dispatch.Signal(providing_args=["msg_id", "from_email"]) diff --git a/group/templates/group/new_msg_reply.html b/group/templates/group/new_msg_reply.html new file mode 100644 index 0000000000..c3ac072191 --- /dev/null +++ b/group/templates/group/new_msg_reply.html @@ -0,0 +1,216 @@ +{% extends "myhome_base.html" %} +{% load seahub_tags avatar_tags %} + +{% block nav_group_class %}class="cur"{% endblock %} + +{% block main_panel %} +

新回复

+ +
+
+{% if group_msgs %} + +{% else %} +

暂无

+{% endif %} + +
+
+ +{% endblock %} + +{% block extra_script %} + + +{% endblock %} diff --git a/group/urls.py b/group/urls.py index 42b5881e12..5cece91865 100644 --- a/group/urls.py +++ b/group/urls.py @@ -1,11 +1,12 @@ from django.conf.urls.defaults import * from views import group_list, group_info, group_member_operations, \ - group_members, msg_reply + group_members, msg_reply, msg_reply_new urlpatterns = patterns('', url(r'^(?P[\d]+)/$', group_info, name='group_info'), url(r'^reply/(?P[\d]+)/$', msg_reply, name='msg_reply'), + url(r'^reply/new/$', msg_reply_new, name='msg_reply_new'), url(r'^(?P[\d]+)/members/$', group_members, name='group_members'), (r'^(?P[\d]+)/member/(?P[^/]+)/$', group_member_operations), ) diff --git a/group/views.py b/group/views.py index 03fa8ebf45..cdf593368a 100644 --- a/group/views.py +++ b/group/views.py @@ -12,7 +12,7 @@ from pysearpc import SearpcError from models import GroupMessage, MessageReply from forms import MessageForm, MessageReplyForm -from signals import grpmsg_added +from signals import grpmsg_added, grpmsg_reply_added from seahub.contacts.models import Contact from seahub.notifications.models import UserNotification from seahub.profile.models import Profile @@ -205,6 +205,13 @@ def msg_reply(request, msg_id): msg_reply.from_email = request.user.username msg_reply.message = msg msg_reply.save() + + # send signal if reply other's message + if group_msg.from_email != request.user.username: + grpmsg_reply_added.send(sender=MessageReply, + msg_id=msg_id, + from_email=request.user.username) + content_type = 'application/json; charset=utf-8' @@ -232,6 +239,41 @@ def msg_reply(request, msg_id): else: return HttpResponse(status=400) +@login_required +def msg_reply_new(request): + grpmsg_reply_list = [] + notes = UserNotification.objects.filter(to_user=request.user.username) + for n in notes: + if n.msg_type == 'grpmsg_reply': + grpmsg_reply_list.append(n.detail) + + group_msgs = [] + for msg_id in grpmsg_reply_list: + try: + m = GroupMessage.objects.get(id=msg_id) + # get message replies + reply_list = MessageReply.objects.filter(reply_to=m) + # get nickname + for reply in reply_list: + try: + p = Profile.objects.get(user=reply.from_email) + reply.nickname = p.nickname + except Profile.DoesNotExist: + reply.nickname = reply.from_email + + m.reply_list = reply_list + group_msgs.append(m) + except GroupMessage.DoesNotExist: + continue + + # remove new group msg reply notification + UserNotification.objects.filter(to_user=request.user.username, + msg_type='grpmsg_reply').delete() + + return render_to_response("group/new_msg_reply.html", { + 'group_msgs': group_msgs, + }, context_instance=RequestContext(request)) + @login_required def group_info(request, group_id): if request.method == 'POST': diff --git a/templates/myhome.html b/templates/myhome.html index 8f4e9e3868..673b2601c3 100644 --- a/templates/myhome.html +++ b/templates/myhome.html @@ -56,6 +56,14 @@

暂无

{% endif %} +

留言回复

+{% if has_grpmsg_reply %} +新回复 +{% else %} +

暂无

+{% endif %} + + {% endblock %} diff --git a/views.py b/views.py index 930a377175..3338cb129e 100644 --- a/views.py +++ b/views.py @@ -546,18 +546,21 @@ def myhome(request): contacts = Contact.objects.filter(user_email=email) # user notifications - l = [] + grpmsg_list = [] + has_grpmsg_reply = False notes = UserNotification.objects.filter(to_user=request.user.username) for n in notes: if n.msg_type == 'group_msg': - l.append(n.detail) + grpmsg_list.append(n.detail) + elif n.msg_type == 'grpmsg_reply': + has_grpmsg_reply = True # my groups groups = ccnet_threaded_rpc.get_groups(email) groups_manage = [] groups_join = [] for group in groups: - if str(group.id) in l: + if str(group.id) in grpmsg_list: group.new_msg = True else: group.new_msg = False @@ -581,6 +584,7 @@ def myhome(request): "in_repos": in_repos, "contacts": contacts, "groups": groups, + "has_grpmsg_reply": has_grpmsg_reply, "groups_manage": groups_manage, "groups_join": groups_join, }, context_instance=RequestContext(request))