mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-18 16:36:15 +00:00
Added innpub messages
This commit is contained in:
110
base/models.py
110
base/models.py
@@ -1,6 +1,14 @@
|
||||
import datetime
|
||||
import re
|
||||
from django.db import models
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
|
||||
from seaserv import get_emailusers
|
||||
|
||||
from shortcuts import get_first_object_or_none
|
||||
from notifications.models import UserNotification
|
||||
from profile.models import Profile
|
||||
|
||||
class UuidObjidMap(models.Model):
|
||||
"""
|
||||
@@ -24,3 +32,105 @@ class FileComment(models.Model):
|
||||
|
||||
class Meta:
|
||||
ordering = ['-timestamp']
|
||||
|
||||
class InnerPubMsg(models.Model):
|
||||
"""
|
||||
Model used for leave message on inner pub page.
|
||||
"""
|
||||
from_email = models.EmailField()
|
||||
message = models.CharField(max_length=500)
|
||||
timestamp = models.DateTimeField(default=datetime.datetime.now)
|
||||
|
||||
class Meta:
|
||||
ordering = ['-timestamp']
|
||||
|
||||
class InnerPubMsgReply(models.Model):
|
||||
reply_to = models.ForeignKey(InnerPubMsg)
|
||||
from_email = models.EmailField()
|
||||
message = models.CharField(max_length=150)
|
||||
timestamp = models.DateTimeField(default=datetime.datetime.now)
|
||||
|
||||
at_pattern = re.compile(r'(\s|^)(@\w+)', flags=re.U)
|
||||
|
||||
@receiver(post_save, sender=InnerPubMsgReply)
|
||||
def msgreply_save_handler(sender, instance, **kwargs):
|
||||
"""
|
||||
Handle sending notification to '@<user>' when reply messages.
|
||||
"""
|
||||
from_email = instance.from_email
|
||||
reply_msg = instance.message
|
||||
innerpub_msg = instance.reply_to
|
||||
to_user = ''
|
||||
|
||||
m = re.match(at_pattern, reply_msg)
|
||||
if m:
|
||||
nickname_or_emailprefix = m.group()[1:]
|
||||
for member in get_emailusers(-1, -1):
|
||||
# For every user, get his username and nickname if
|
||||
# it exists, check whether match.
|
||||
username = member.email
|
||||
if username == from_email:
|
||||
continue
|
||||
|
||||
p = get_first_object_or_none(
|
||||
Profile.objects.filter(user=username))
|
||||
nickname = p.nickname if p else ''
|
||||
if nickname == nickname_or_emailprefix or \
|
||||
username.split('@')[0] == nickname_or_emailprefix:
|
||||
to_user = username
|
||||
break
|
||||
|
||||
if to_user:
|
||||
# Send notification to the user if he replies someone else'
|
||||
# message.
|
||||
try:
|
||||
UserNotification.objects.get(to_user=to_user,
|
||||
msg_type='innerpubmsg_reply',
|
||||
detail=innerpub_msg.id)
|
||||
except UserNotification.DoesNotExist:
|
||||
n = UserNotification(to_user=to_user,
|
||||
msg_type='innerpubmsg_reply',
|
||||
detail=innerpub_msg.id)
|
||||
n.save()
|
||||
|
||||
@receiver(post_save, sender=InnerPubMsg)
|
||||
def innerpub_msg_added_cb(sender, instance, **kwargs):
|
||||
from_email = instance.from_email
|
||||
|
||||
users = get_emailusers(-1, -1)
|
||||
for u in users:
|
||||
if u.email == from_email:
|
||||
continue
|
||||
try:
|
||||
UserNotification.objects.get(to_user=u.email,
|
||||
msg_type='innerpub_msg')
|
||||
except UserNotification.DoesNotExist:
|
||||
n = UserNotification(to_user=u.email, msg_type='innerpub_msg',
|
||||
detail='')
|
||||
n.save()
|
||||
|
||||
@receiver(post_save, sender=InnerPubMsgReply)
|
||||
def innerpubmsg_reply_added_cb(sender, instance, **kwargs):
|
||||
innerpub_msg = instance.reply_to
|
||||
from_email = instance.from_email
|
||||
msg_id = innerpub_msg.id
|
||||
|
||||
if from_email == innerpub_msg.from_email:
|
||||
# No need to send notification when reply own message.
|
||||
return
|
||||
|
||||
try:
|
||||
innerpub_msg = InnerPubMsg.objects.get(id=msg_id)
|
||||
except InnerPubMsg.DoesNotExist:
|
||||
pass
|
||||
|
||||
try:
|
||||
UserNotification.objects.get(to_user=innerpub_msg.from_email,
|
||||
msg_type='innerpubmsg_reply',
|
||||
detail=msg_id)
|
||||
except UserNotification.DoesNotExist:
|
||||
n = UserNotification(to_user=innerpub_msg.from_email,
|
||||
msg_type='innerpubmsg_reply',
|
||||
detail=msg_id)
|
||||
n.save()
|
||||
|
||||
|
Reference in New Issue
Block a user