1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-25 14:50:29 +00:00

Merge branch 'del-received-msg' of git://github.com/imwhatiam/seahub into imwhatiam-del-received-msg

This commit is contained in:
zhengxie
2014-06-10 10:48:16 +08:00
4 changed files with 71 additions and 7 deletions

View File

@@ -17,14 +17,15 @@ class UserMessageManager(models.Manager):
others and others send to he/she. others and others send to he/she.
""" """
return super(UserMessageManager, self).filter( return super(UserMessageManager, self).filter(
Q(to_email=username)|Q(from_email=username)).order_by('to_email') (Q(to_email=username)&Q(recipient_deleted_at__isnull=True)) |
(Q(from_email=username)&Q(sender_deleted_at__isnull=True))).order_by('to_email')
def get_messages_between_users(self, user1, user2): def get_messages_between_users(self, user1, user2):
"""List messages between two users. """List messages between two users.
""" """
return super(UserMessageManager, self).filter( return super(UserMessageManager, self).filter(
(Q(from_email=user1)&Q(to_email=user2)) | (Q(from_email=user1)&Q(to_email=user2)&Q(sender_deleted_at__isnull=True)) |
(Q(from_email=user2)&Q(to_email=user1))).order_by('-timestamp') (Q(from_email=user2)&Q(to_email=user1)&Q(recipient_deleted_at__isnull=True))).order_by('-timestamp')
def add_unread_message(self, user1, user2, msg): def add_unread_message(self, user1, user2, msg):
"""Add a new message sent from ``user1`` to ``user2``. """Add a new message sent from ``user1`` to ``user2``.
@@ -56,6 +57,8 @@ class UserMessage(models.Model):
to_email = LowerCaseCharField(max_length=255, db_index=True) to_email = LowerCaseCharField(max_length=255, db_index=True)
timestamp = models.DateTimeField(default=datetime.datetime.now) timestamp = models.DateTimeField(default=datetime.datetime.now)
ifread = models.BooleanField() ifread = models.BooleanField()
sender_deleted_at = models.DateTimeField(null=True, blank=True)
recipient_deleted_at = models.DateTimeField(null=True, blank=True)
objects = UserMessageManager() objects = UserMessageManager()
def __unicode__(self): def __unicode__(self):

View File

@@ -39,10 +39,10 @@
<ul class="msg-list"> <ul class="msg-list">
{% for msg in person_msgs.object_list %} {% for msg in person_msgs.object_list %}
{% if msg.to_email == request.user.email %} {% if msg.to_email == request.user.email %}
<li class="msg msg-received w100"> <li class="msg msg-received w100" data-id="{{msg.message_id}}">
<a href="{% url 'user_profile' msg.from_email|id_or_email %}" class="pic fright">{% avatar msg.from_email 48 %}</a> <a href="{% url 'user_profile' msg.from_email|id_or_email %}" class="pic fright">{% avatar msg.from_email 48 %}</a>
{% else %} {% else %}
<li class="msg w100" data-id="{{msg.message_id}}"> <li class="msg msg-send w100" data-id="{{msg.message_id}}">
<a href="{% url 'user_profile' msg.from_email|id_or_email %}" class="pic fleft">{% avatar msg.from_email 48 %}</a> <a href="{% url 'user_profile' msg.from_email|id_or_email %}" class="pic fleft">{% avatar msg.from_email 48 %}</a>
{% endif %} {% endif %}
<div class="txt"> <div class="txt">
@@ -50,6 +50,8 @@
<div class="msg-hd w100 ovhd"> <div class="msg-hd w100 ovhd">
{% if msg.from_email == request.user.username %} {% if msg.from_email == request.user.username %}
<span class="msg-del op fright vh">{% trans "Delete" %}</span> <span class="msg-del op fright vh">{% trans "Delete" %}</span>
{% else %}
<span class="re-msg-del op fright vh">{% trans "Delete" %}</span>
{% endif %} {% endif %}
<a class="author" href="{% url 'user_profile' msg.from_email|id_or_email %}">{{ msg.from_email|email2nickname }}</a> <a class="author" href="{% url 'user_profile' msg.from_email|id_or_email %}">{{ msg.from_email|email2nickname }}</a>
<span class="time">{{ msg.timestamp|translate_seahub_time }}</span> <span class="time">{{ msg.timestamp|translate_seahub_time }}</span>
@@ -220,6 +222,42 @@ $('.msg-del', context).click(function() {
}); });
}); });
$('.re-msg-del', context).click(function() {
var msg = $(this).parents('.msg');
var cfm;
if (msg.find('.msg-del-confirm').length > 0) {
cfm = msg.find('.msg-del-confirm');
} else {
cfm = '<div class="op-confirm msg-del-confirm hide"><p>{% trans "Really want to delete this discussion?" %}</p><button class="yes">{% trans "Yes" %}</button><button class="no">{% trans "No" %}</button></div>';
var msg_main = msg.find('.msg-main');
var msg_hd = msg.find('.msg-hd');
cfm = msg_main.append(cfm).children(':last');
cfm.css({'right':msg_main.css('padding-right'), 'top':msg_hd.position().top + msg_hd.height()});
}
cfm.removeClass('hide');
cfm.children('.yes').click(function() {
cfm.addClass('hide');
$.ajax({
url: '{{SITE_ROOT}}user/' + msg.attr('data-id') + '/remsgdel/',
dataType:'json',
success: function(data) {
if (data['success']) {
msg.remove();
feedback("{% trans "Successfully deleted" %}", 'success');
} else {
feedback("{% trans "Failed to delete: " %}" + data['err_msg'], 'error');
}
},
error: function() {
feedback("{% trans "Failed." %}", 'error');
}
});
});
cfm.children('.no').click(function() {
cfm.addClass('hide');
});
});
$('.msg-main', context).hover( $('.msg-main', context).hover(
function(){ function(){
$(this).find('.op').removeClass('vh'); $(this).find('.op').removeClass('vh');

View File

@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os import os
import datetime
import simplejson as json import simplejson as json
from django.http import HttpResponse, HttpResponseBadRequest, \ from django.http import HttpResponse, HttpResponseBadRequest, \
HttpResponseRedirect , Http404 HttpResponseRedirect , Http404
@@ -123,7 +124,28 @@ def user_msg_remove(request, msg_id):
else: else:
# Test whether user is admin or message owner. # Test whether user is admin or message owner.
if msg.from_email == request.user.username: if msg.from_email == request.user.username:
msg.delete() msg.sender_deleted_at = datetime.datetime.now()
msg.save()
return HttpResponse(json.dumps({'success': True}),
content_type='application/json; charset=utf-8')
else:
return HttpResponse(json.dumps({'success': False, 'err_msg': _(u"You don't have the permission.")}),
content_type='application/json; charset=utf-8')
@login_required
def user_received_msg_remove(request, msg_id):
"""Remove received message.
"""
try:
msg = UserMessage.objects.get(message_id=msg_id)
except UserMessage.DoesNotExist:
return HttpResponse(json.dumps({'success': False, 'err_msg':_(u"The message doesn't exist")}),
content_type='application/json; charset=utf-8')
else:
# Test whether current user is the recipient of this msg.
if msg.to_email == request.user.username:
msg.recipient_deleted_at = datetime.datetime.now()
msg.save()
return HttpResponse(json.dumps({'success': True}), return HttpResponse(json.dumps({'success': True}),
content_type='application/json; charset=utf-8') content_type='application/json; charset=utf-8')
else: else:

View File

@@ -10,7 +10,7 @@ from seahub.views.file import view_file, view_history_file, view_trash_file,\
from seahub.views.repo import repo, repo_history_view from seahub.views.repo import repo, repo_history_view
from notifications.views import notification_list from notifications.views import notification_list
from group.views import group_list from group.views import group_list
from message.views import user_msg_list, user_msg_remove from message.views import user_msg_list, user_msg_remove, user_received_msg_remove
from share.views import user_share_list, gen_private_file_share, \ from share.views import user_share_list, gen_private_file_share, \
rm_private_file_share, save_private_file_share rm_private_file_share, save_private_file_share
from seahub.views.wiki import personal_wiki, personal_wiki_pages, \ from seahub.views.wiki import personal_wiki, personal_wiki_pages, \
@@ -103,6 +103,7 @@ urlpatterns = patterns('',
url(r'^convert_cmmt_desc_link/$', convert_cmmt_desc_link, name='convert_cmmt_desc_link'), url(r'^convert_cmmt_desc_link/$', convert_cmmt_desc_link, name='convert_cmmt_desc_link'),
url(r'^user/(?P<id_or_email>[^/]+)/msgs/$', user_msg_list, name='user_msg_list'), url(r'^user/(?P<id_or_email>[^/]+)/msgs/$', user_msg_list, name='user_msg_list'),
url(r'^user/(?P<msg_id>\d+)/msgdel/$', user_msg_remove, name='user_msg_remove'), url(r'^user/(?P<msg_id>\d+)/msgdel/$', user_msg_remove, name='user_msg_remove'),
url(r'^user/(?P<msg_id>\d+)/remsgdel/$', user_received_msg_remove, name='user_received_msg_remove'),
url(r'^user/(?P<id_or_email>[^/]+)/shares/$', user_share_list, name='user_share_list'), url(r'^user/(?P<id_or_email>[^/]+)/shares/$', user_share_list, name='user_share_list'),
url(r'^modules/toggle/$', toggle_modules, name="toggle_modules"), url(r'^modules/toggle/$', toggle_modules, name="toggle_modules"),
url(r'^download_client_program/$', TemplateView.as_view(template_name="download.html"), name="download_client"), url(r'^download_client_program/$', TemplateView.as_view(template_name="download.html"), name="download_client"),