diff --git a/media/css/seahub.css b/media/css/seahub.css index 69f37d8f52..29d6a1761f 100644 --- a/media/css/seahub.css +++ b/media/css/seahub.css @@ -2703,7 +2703,7 @@ textarea:-moz-placeholder {/* for FF */ padding:2px; margin-bottom:3px; } -#mass-email { +#mass-receiver { width:432px; } /* payments */ diff --git a/seahub/message/message.py b/seahub/message/message.py index 97ed3cf1b0..01fd823fc6 100644 --- a/seahub/message/message.py +++ b/seahub/message/message.py @@ -1,24 +1,27 @@ # -*- coding: utf-8 -*- +from seahub.group.models import GroupMessage +from seahub.notifications.models import UserNotification, MSG_TYPE_GROUP_MSG -def msg_info_list(msgs, user): +def user_msg_info_list(user_msgs, user): """Group message list by ``from_email`` or ``to_email`` and order by - message time. + message time. **Returns** - [ - (u'foo@foo.com', {'last_msg': u'test', 'not_read': 0, 'last_time': datetime.datetime(2013, 5, 27, 13, 26, 7, 423777)}), - (u'bar@bar.com', {'last_msg': u'hello', 'not_read': 0, 'last_time': datetime.datetime(2013, 5, 27, 13, 10, 31, 811318)}), + { + u'foo@foo.com': {'type': u'user', 'last_msg': u'test', 'not_read': 0, 'last_time': datetime.datetime(2013, 5, 27, 13, 26, 7, 423777)}, + u'bar@bar.com', {'type': u'user', 'last_msg': u'hello', 'not_read': 0, 'last_time': datetime.datetime(2013, 5, 27, 13, 10, 31, 811318)}, ... - ] + } """ message = {} - for msg in msgs: + for msg in user_msgs: if (msg.from_email == user): # message user send to others if not message.has_key(msg.to_email): message.setdefault(msg.to_email,{}) + message[msg.to_email].setdefault('type', 'user') message[msg.to_email].setdefault('not_read', 0) message[msg.to_email].setdefault('last_msg',msg.message) message[msg.to_email].setdefault('last_time',msg.timestamp) @@ -30,6 +33,7 @@ def msg_info_list(msgs, user): else: # message others send to the user if not message.has_key(msg.from_email): message.setdefault(msg.from_email,{}) + message[msg.from_email].setdefault('type', 'user') message[msg.from_email].setdefault('not_read',0) message[msg.from_email].setdefault('last_msg',msg.message) message[msg.from_email].setdefault('last_time',msg.timestamp) @@ -41,7 +45,35 @@ def msg_info_list(msgs, user): if not msg.ifread: message[msg.from_email]['not_read'] += 1 - sorted_msg = sorted(message.items(), key=lambda x: x[1]['last_time'], - reverse=True) - return sorted_msg + return message + +def group_msg_info_list(joined_groups, username): + """ + Group message of groups that user joined. + + **Returns** + { + u'test_group': {'type': u'group', 'id': 1, 'not_read': 32, 'last_msg': u'hey', 'last_time': datetime.datetime(2013, 5, 27, 13, 12, 31, 343452)}, + ... + } + """ + message = {} + user_notices = UserNotification.objects.filter(to_user=username, + msg_type=MSG_TYPE_GROUP_MSG) + for g in joined_groups: + group_msg = GroupMessage.objects.filter(group_id=g.id).order_by('-timestamp')[:1] + if len(group_msg) > 0: + message.setdefault(g.group_name,{}) + message[g.group_name].setdefault('type', 'group') + message[g.group_name].setdefault('id', g.id) + message[g.group_name].setdefault('not_read', 0) + message[g.group_name].setdefault('last_msg', group_msg[0].message) + message[g.group_name].setdefault('last_time', group_msg[0].timestamp) + for notice in user_notices: + gid = notice.group_message_detail_to_dict().get('group_id') + if gid == g.id: + if notice.seen is False: + message[g.group_name]['not_read'] += 1 + + return message diff --git a/seahub/message/templates/message/all_msg.html b/seahub/message/templates/message/all_msg.html index 81575f9735..7948c06d89 100644 --- a/seahub/message/templates/message/all_msg.html +++ b/seahub/message/templates/message/all_msg.html @@ -1,12 +1,21 @@ -{% load avatar_tags i18n seahub_tags %} +{% load avatar_tags group_avatar_tags i18n seahub_tags %} {% for key,value in msgs %} {% with not_read=value.not_read %} +{% if value.type == 'user' %}