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 %}
+
+ {% for msg in group_msgs %}
+ -
+
+
+
+
+
{{ msg.message }}
+ {% if msg.reply_cnt == 0 %}
+
回复
+ {% else %}
+
{{ msg.reply_cnt }} 回复
+ {% endif %}
+
收起回复
+
+ {% if msg.reply_list %}
+ {% for reply in msg.reply_list %}
+ - {{ reply.message }} -- {{ reply.nickname }}
+ {% endfor %}
+ {% endif %}
+
+
+
+
+
+ {% endfor %}
+
+{% 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))