1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-26 07:22:34 +00:00

notice group member when share library to group

This commit is contained in:
lian
2016-04-29 11:07:48 +08:00
parent 5a52ad7168
commit db81d636b8
9 changed files with 194 additions and 90 deletions

View File

@@ -17,7 +17,8 @@ from seahub.api2.throttling import UserRateThrottle
from seahub.api2.utils import api_error from seahub.api2.utils import api_error
from seahub.base.templatetags.seahub_tags import email2nickname from seahub.base.templatetags.seahub_tags import email2nickname
from seahub.base.accounts import User from seahub.base.accounts import User
from seahub.share.signals import share_repo_to_user_successful from seahub.share.signals import share_repo_to_user_successful, \
share_repo_to_group_successful
from seahub.utils import (is_org_context, is_valid_username, from seahub.utils import (is_org_context, is_valid_username,
send_perm_audit_msg) send_perm_audit_msg)
@@ -345,6 +346,9 @@ class DirSharedItemsEndpoint(APIView):
seafile_api.set_group_repo(shared_repo.repo_id, gid, seafile_api.set_group_repo(shared_repo.repo_id, gid,
username, permission) username, permission)
share_repo_to_group_successful.send(sender=None,
from_user=username, group_id=gid, repo=shared_repo)
result['success'].append({ result['success'].append({
"share_type": "group", "share_type": "group",
"group_info": { "group_info": {

View File

@@ -22,7 +22,7 @@ from django.contrib.auth.hashers import check_password
from django.contrib.sites.models import RequestSite from django.contrib.sites.models import RequestSite
from django.db import IntegrityError from django.db import IntegrityError
from django.db.models import F, Q from django.db.models import F, Q
from django.http import HttpResponse, Http404 from django.http import HttpResponse
from django.template import RequestContext from django.template import RequestContext
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.template.defaultfilters import filesizeformat from django.template.defaultfilters import filesizeformat
@@ -40,31 +40,24 @@ from .utils import get_diff_details, \
api_repo_user_folder_perm_check, api_repo_setting_permission_check, \ api_repo_user_folder_perm_check, api_repo_setting_permission_check, \
api_repo_group_folder_perm_check api_repo_group_folder_perm_check
from seahub.avatar.settings import AVATAR_DEFAULT_SIZE
from seahub.avatar.templatetags.avatar_tags import api_avatar_url, avatar from seahub.avatar.templatetags.avatar_tags import api_avatar_url, avatar
from seahub.avatar.templatetags.group_avatar_tags import api_grp_avatar_url, \ from seahub.avatar.templatetags.group_avatar_tags import api_grp_avatar_url, \
grp_avatar grp_avatar
from seahub.base.accounts import User from seahub.base.accounts import User
from seahub.base.models import FileDiscuss, UserStarredFiles, DeviceToken from seahub.base.models import UserStarredFiles, DeviceToken
from seahub.base.templatetags.seahub_tags import email2nickname, \ from seahub.base.templatetags.seahub_tags import email2nickname, \
translate_commit_desc, translate_seahub_time, translate_commit_desc_escape translate_seahub_time, translate_commit_desc_escape
from seahub.group.models import GroupMessage, MessageReply, MessageAttachment from seahub.group.views import remove_group_common, \
from seahub.group.signals import grpmsg_added
from seahub.group.views import group_check, remove_group_common, \
rename_group_with_new_name, is_group_staff rename_group_with_new_name, is_group_staff
from seahub.group.utils import BadGroupNameError, ConflictGroupNameError, \ from seahub.group.utils import BadGroupNameError, ConflictGroupNameError, \
validate_group_name validate_group_name
from seahub.thumbnail.utils import generate_thumbnail from seahub.thumbnail.utils import generate_thumbnail
from seahub.message.models import UserMessage
from seahub.notifications.models import UserNotification from seahub.notifications.models import UserNotification
from seahub.options.models import UserOptions from seahub.options.models import UserOptions
from seahub.contacts.models import Contact from seahub.contacts.models import Contact
from seahub.profile.models import Profile, DetailedProfile from seahub.profile.models import Profile, DetailedProfile
from seahub.shortcuts import get_first_object_or_none
from seahub.signals import (repo_created, repo_deleted) from seahub.signals import (repo_created, repo_deleted)
from seahub.share.models import FileShare, OrgFileShare, UploadLinkShare from seahub.share.models import FileShare, OrgFileShare, UploadLinkShare
from seahub.share.signals import share_repo_to_user_successful
from seahub.share.views import list_shared_repos
from seahub.utils import gen_file_get_url, gen_token, gen_file_upload_url, \ from seahub.utils import gen_file_get_url, gen_token, gen_file_upload_url, \
check_filename_with_rename, is_valid_username, EVENTS_ENABLED, \ check_filename_with_rename, is_valid_username, EVENTS_ENABLED, \
get_user_events, EMPTY_SHA1, get_ccnet_server_addr_port, is_pro_version, \ get_user_events, EMPTY_SHA1, get_ccnet_server_addr_port, is_pro_version, \
@@ -75,11 +68,11 @@ from seahub.utils import gen_file_get_url, gen_token, gen_file_upload_url, \
from seahub.utils.devices import get_user_devices, do_unlink_device from seahub.utils.devices import get_user_devices, do_unlink_device
from seahub.utils.repo import get_sub_repo_abbrev_origin_path from seahub.utils.repo import get_sub_repo_abbrev_origin_path
from seahub.utils.star import star_file, unstar_file from seahub.utils.star import star_file, unstar_file
from seahub.utils.file_types import IMAGE, DOCUMENT from seahub.utils.file_types import DOCUMENT
from seahub.utils.file_size import get_file_size_unit from seahub.utils.file_size import get_file_size_unit
from seahub.utils.timeutils import utc_to_local, datetime_to_isoformat_timestr from seahub.utils.timeutils import utc_to_local, datetime_to_isoformat_timestr
from seahub.views import validate_owner, is_registered_user, check_file_lock, \ from seahub.views import is_registered_user, check_file_lock, \
group_events_data, get_diff, create_default_library, get_owned_repo_list, \ group_events_data, get_diff, create_default_library, \
list_inner_pub_repos, get_virtual_repos_by_owner, \ list_inner_pub_repos, get_virtual_repos_by_owner, \
check_folder_permission check_folder_permission
from seahub.views.ajax import get_share_in_repo_list, get_groups_by_user, \ from seahub.views.ajax import get_share_in_repo_list, get_groups_by_user, \
@@ -93,7 +86,7 @@ if HAS_OFFICE_CONVERTER:
import seahub.settings as settings import seahub.settings as settings
from seahub.settings import THUMBNAIL_EXTENSION, THUMBNAIL_ROOT, \ from seahub.settings import THUMBNAIL_EXTENSION, THUMBNAIL_ROOT, \
ENABLE_GLOBAL_ADDRESSBOOK, FILE_LOCK_EXPIRATION_DAYS, \ ENABLE_GLOBAL_ADDRESSBOOK, FILE_LOCK_EXPIRATION_DAYS, \
ENABLE_THUMBNAIL, ENABLE_SUB_LIBRARY, ENABLE_FOLDER_PERM ENABLE_THUMBNAIL, ENABLE_FOLDER_PERM
try: try:
from seahub.settings import CLOUD_MODE from seahub.settings import CLOUD_MODE
except ImportError: except ImportError:
@@ -119,15 +112,14 @@ except ImportError:
from pysearpc import SearpcError, SearpcObjEncoder from pysearpc import SearpcError, SearpcObjEncoder
import seaserv import seaserv
from seaserv import seafserv_rpc, seafserv_threaded_rpc, \ from seaserv import seafserv_threaded_rpc, \
get_personal_groups_by_user, get_session_info, is_personal_repo, \ get_personal_groups_by_user, get_session_info, is_personal_repo, \
get_repo, check_permission, get_commits, is_passwd_set,\ get_repo, check_permission, get_commits, is_passwd_set,\
list_personal_repos_by_owner, check_quota, \ check_quota, list_share_repos, get_group_repos_by_owner, get_group_repoids, \
list_share_repos, get_group_repos_by_owner, get_group_repoids, \
list_inner_pub_repos_by_owner, is_group_user, \ list_inner_pub_repos_by_owner, is_group_user, \
remove_share, unshare_group_repo, unset_inner_pub_repo, get_group, \ remove_share, unset_inner_pub_repo, get_group, \
get_commit, get_file_id_by_path, MAX_DOWNLOAD_DIR_SIZE, edit_repo, \ get_commit, get_file_id_by_path, MAX_DOWNLOAD_DIR_SIZE, edit_repo, \
ccnet_threaded_rpc, get_personal_groups, seafile_api, check_group_staff, \ ccnet_threaded_rpc, get_personal_groups, seafile_api, \
create_org, ccnet_api create_org, ccnet_api
from constance import config from constance import config

View File

@@ -13,7 +13,7 @@ from django.utils import translation
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
import seaserv import seaserv
from seaserv import seafile_api from seaserv import seafile_api, ccnet_api
from seahub.base.models import CommandsLastCheck from seahub.base.models import CommandsLastCheck
from seahub.notifications.models import UserNotification from seahub.notifications.models import UserNotification
from seahub.utils import send_html_email, get_service_url, \ from seahub.utils import send_html_email, get_service_url, \
@@ -83,9 +83,7 @@ class Command(BaseCommand):
d = notice.group_message_detail_to_dict() d = notice.group_message_detail_to_dict()
group_id = d['group_id'] group_id = d['group_id']
message = d['message'] message = d['message']
group = seaserv.get_group(int(group_id)) group = ccnet_api.get_group(int(group_id))
if group is None:
notice.delete()
notice.group_url = reverse('group_discuss', args=[group.id]) notice.group_url = reverse('group_discuss', args=[group.id])
notice.notice_from = escape(email2nickname(d['msg_from'])) notice.notice_from = escape(email2nickname(d['msg_from']))
@@ -96,16 +94,31 @@ class Command(BaseCommand):
def format_repo_share_msg(self, notice): def format_repo_share_msg(self, notice):
d = json.loads(notice.detail) d = json.loads(notice.detail)
repo_id = d['repo_id'] repo_id = d['repo_id']
repo = seafile_api.get_repo(repo_id) repo = seafile_api.get_repo(repo_id)
if repo is None:
notice.delete()
notice.repo_url = reverse("view_common_lib_dir", args=[repo_id, '']) notice.repo_url = reverse("view_common_lib_dir", args=[repo_id, ''])
notice.notice_from = escape(email2nickname(d['share_from'])) notice.notice_from = escape(email2nickname(d['share_from']))
notice.repo_name = repo.name notice.repo_name = repo.name
notice.avatar_src = self.get_avatar_src(d['share_from']) notice.avatar_src = self.get_avatar_src(d['share_from'])
return notice
def format_repo_share_to_group_msg(self, notice):
d = json.loads(notice.detail)
repo_id = d['repo_id']
repo = seafile_api.get_repo(repo_id)
group_id = d['group_id']
group = ccnet_api.get_group(group_id)
notice.repo_url = reverse("view_common_lib_dir", args=[repo_id, ''])
notice.notice_from = escape(email2nickname(d['share_from']))
notice.repo_name = repo.name
notice.avatar_src = self.get_avatar_src(d['share_from'])
notice.group_url = reverse("group_info", args=[group.id])
notice.group_name = group.group_name
return notice return notice
def format_file_uploaded_msg(self, notice): def format_file_uploaded_msg(self, notice):
@@ -132,9 +145,7 @@ class Command(BaseCommand):
group_id = d['group_id'] group_id = d['group_id']
join_request_msg = d['join_request_msg'] join_request_msg = d['join_request_msg']
group = seaserv.get_group(group_id) group = ccnet_api.get_group(group_id)
if group is None:
notice.delete()
notice.grpjoin_user_profile_url = reverse('user_profile', notice.grpjoin_user_profile_url = reverse('user_profile',
args=[username]) args=[username])
@@ -150,9 +161,7 @@ class Command(BaseCommand):
group_staff = d['group_staff'] group_staff = d['group_staff']
group_id = d['group_id'] group_id = d['group_id']
group = seaserv.get_group(group_id) group = ccnet_api.get_group(group_id)
if group is None:
notice.delete()
notice.notice_from = group_staff notice.notice_from = group_staff
notice.avatar_src = self.get_avatar_src(group_staff) notice.avatar_src = self.get_avatar_src(group_staff)
@@ -208,6 +217,22 @@ class Command(BaseCommand):
for notice in unseen_notices: for notice in unseen_notices:
logger.info('Processing unseen notice: [%s]' % (notice)) logger.info('Processing unseen notice: [%s]' % (notice))
d = json.loads(notice.detail)
repo_id = d.get('repo_id', None)
group_id = d.get('group_id', None)
try:
if repo_id and not seafile_api.get_repo(repo_id):
notice.delete()
continue
if group_id and not ccnet_api.get_group(group_id):
notice.delete()
continue
except Exception as e:
logger.error(e)
continue
if notice.to_user != to_user: if notice.to_user != to_user:
continue continue
@@ -220,6 +245,9 @@ class Command(BaseCommand):
elif notice.is_repo_share_msg(): elif notice.is_repo_share_msg():
notice = self.format_repo_share_msg(notice) notice = self.format_repo_share_msg(notice)
elif notice.is_repo_share_to_group_msg():
notice = self.format_repo_share_to_group_msg(notice)
elif notice.is_file_uploaded_msg(): elif notice.is_file_uploaded_msg():
notice = self.format_file_uploaded_msg(notice) notice = self.format_file_uploaded_msg(notice)

View File

@@ -5,14 +5,12 @@ import json
import logging import logging
from django.db import models from django.db import models
from django.db.models.signals import post_save
from django.forms import ModelForm, Textarea from django.forms import ModelForm, Textarea
from django.utils.http import urlquote
from django.utils.html import escape from django.utils.html import escape
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
import seaserv import seaserv
from seaserv import seafile_api from seaserv import seafile_api, ccnet_api
from seahub.base.fields import LowerCaseCharField from seahub.base.fields import LowerCaseCharField
from seahub.base.templatetags.seahub_tags import email2nickname from seahub.base.templatetags.seahub_tags import email2nickname
@@ -42,6 +40,7 @@ MSG_TYPE_GROUP_JOIN_REQUEST = 'group_join_request'
MSG_TYPE_ADD_USER_TO_GROUP = 'add_user_to_group' MSG_TYPE_ADD_USER_TO_GROUP = 'add_user_to_group'
MSG_TYPE_FILE_UPLOADED = 'file_uploaded' MSG_TYPE_FILE_UPLOADED = 'file_uploaded'
MSG_TYPE_REPO_SHARE = 'repo_share' MSG_TYPE_REPO_SHARE = 'repo_share'
MSG_TYPE_REPO_SHARE_TO_GROUP = 'repo_share_to_group'
MSG_TYPE_USER_MESSAGE = 'user_message' MSG_TYPE_USER_MESSAGE = 'user_message'
def file_uploaded_msg_to_json(file_name, repo_id, uploaded_to): def file_uploaded_msg_to_json(file_name, repo_id, uploaded_to):
@@ -53,6 +52,9 @@ def file_uploaded_msg_to_json(file_name, repo_id, uploaded_to):
def repo_share_msg_to_json(share_from, repo_id): def repo_share_msg_to_json(share_from, repo_id):
return json.dumps({'share_from': share_from, 'repo_id': repo_id}) return json.dumps({'share_from': share_from, 'repo_id': repo_id})
def repo_share_to_group_msg_to_json(share_from, repo_id, group_id):
return json.dumps({'share_from': share_from, 'repo_id': repo_id, 'group_id': group_id})
def group_msg_to_json(group_id, msg_from, message): def group_msg_to_json(group_id, msg_from, message):
return json.dumps({'group_id': group_id, 'msg_from': msg_from, return json.dumps({'group_id': group_id, 'msg_from': msg_from,
'message': message}) 'message': message})
@@ -226,6 +228,17 @@ class UserNotificationManager(models.Manager):
return self._add_user_notification(to_user, return self._add_user_notification(to_user,
MSG_TYPE_REPO_SHARE, detail) MSG_TYPE_REPO_SHARE, detail)
def add_repo_share_to_group_msg(self, to_user, detail):
"""Notify ``to_user`` that others shared a repo to group.
Arguments:
- `self`:
- `to_user`:
- `detail`:
"""
return self._add_user_notification(to_user,
MSG_TYPE_REPO_SHARE_TO_GROUP, detail)
def add_user_message(self, to_user, detail): def add_user_message(self, to_user, detail):
"""Notify ``to_user`` that others sent a message to him/her. """Notify ``to_user`` that others sent a message to him/her.
@@ -293,6 +306,14 @@ class UserNotification(models.Model):
""" """
return self.msg_type == MSG_TYPE_REPO_SHARE return self.msg_type == MSG_TYPE_REPO_SHARE
def is_repo_share_to_group_msg(self):
"""
Arguments:
- `self`:
"""
return self.msg_type == MSG_TYPE_REPO_SHARE_TO_GROUP
def is_user_message(self): def is_user_message(self):
""" """
@@ -439,6 +460,44 @@ class UserNotification(models.Model):
'href': reverse('view_common_lib_dir', args=[repo.id, '']), 'href': reverse('view_common_lib_dir', args=[repo.id, '']),
'repo_name': escape(repo.name), 'repo_name': escape(repo.name),
} }
return msg
def format_repo_share_to_group_msg(self):
"""
Arguments:
- `self`:
"""
try:
d = json.loads(self.detail)
except Exception as e:
logger.error(e)
return _(u"Internal error")
share_from = email2nickname(d['share_from'])
repo_id = d['repo_id']
group_id = d['group_id']
try:
repo = seafile_api.get_repo(repo_id)
group = ccnet_api.get_group(group_id)
except Exception as e:
logger.error(e)
return None
if not repo or not group:
self.delete()
return None
msg = _(u"%(user)s has shared a library named <a href='%(repo_href)s'>%(repo_name)s</a> to group <a href='%(group_href)s'>%(group_name)s</a>.") % {
'user': escape(share_from),
'repo_href': reverse('view_common_lib_dir', args=[repo.id, '']),
'repo_name': escape(repo.name),
'group_href': reverse('group_info', args=[group.id]),
'group_name': escape(group.group_name),
}
return msg return msg
def format_user_message_title(self): def format_user_message_title(self):
@@ -450,6 +509,7 @@ class UserNotification(models.Model):
try: try:
d = self.user_message_detail_to_dict() d = self.user_message_detail_to_dict()
except self.InvalidDetailError as e: except self.InvalidDetailError as e:
logger.error(e)
return _(u"Internal error") return _(u"Internal error")
msg_from = d.get('msg_from') msg_from = d.get('msg_from')
@@ -470,6 +530,7 @@ class UserNotification(models.Model):
try: try:
d = self.user_message_detail_to_dict() d = self.user_message_detail_to_dict()
except self.InvalidDetailError as e: except self.InvalidDetailError as e:
logger.error(e)
return _(u"Internal error") return _(u"Internal error")
message = d.get('message') message = d.get('message')
@@ -487,10 +548,11 @@ class UserNotification(models.Model):
try: try:
d = self.group_message_detail_to_dict() d = self.group_message_detail_to_dict()
except self.InvalidDetailError as e: except self.InvalidDetailError as e:
logger.error(e)
return _(u"Internal error") return _(u"Internal error")
group_id = d.get('group_id') group_id = d.get('group_id')
group = seaserv.get_group(group_id) group = ccnet_api.get_group(group_id)
if group is None: if group is None:
self.delete() self.delete()
return None return None
@@ -517,6 +579,7 @@ class UserNotification(models.Model):
try: try:
d = self.group_message_detail_to_dict() d = self.group_message_detail_to_dict()
except self.InvalidDetailError as e: except self.InvalidDetailError as e:
logger.error(e)
return _(u"Internal error") return _(u"Internal error")
message = d.get('message') message = d.get('message')
@@ -541,7 +604,7 @@ class UserNotification(models.Model):
group_id = d['group_id'] group_id = d['group_id']
join_request_msg = d['join_request_msg'] join_request_msg = d['join_request_msg']
group = seaserv.get_group(group_id) group = ccnet_api.get_group(group_id)
if group is None: if group is None:
self.delete() self.delete()
return None return None
@@ -570,7 +633,7 @@ class UserNotification(models.Model):
group_staff = d['group_staff'] group_staff = d['group_staff']
group_id = d['group_id'] group_id = d['group_id']
group = seaserv.get_group(group_id) group = ccnet_api.get_group(group_id)
if group is None: if group is None:
self.delete() self.delete()
return None return None
@@ -588,10 +651,9 @@ from django.core.urlresolvers import reverse
from django.dispatch import receiver from django.dispatch import receiver
from seahub.signals import upload_file_successful from seahub.signals import upload_file_successful
from seahub.group.models import GroupMessage, MessageReply
from seahub.group.signals import grpmsg_added, group_join_request, add_user_to_group from seahub.group.signals import grpmsg_added, group_join_request, add_user_to_group
from seahub.share.signals import share_repo_to_user_successful from seahub.share.signals import share_repo_to_user_successful, \
from seahub.message.models import UserMessage share_repo_to_group_successful
from seahub.message.signals import user_message_sent from seahub.message.signals import user_message_sent
@receiver(upload_file_successful) @receiver(upload_file_successful)
@@ -606,24 +668,6 @@ def add_upload_file_msg_cb(sender, **kwargs):
filename = os.path.basename(file_path) filename = os.path.basename(file_path)
folder_path = os.path.dirname(file_path) folder_path = os.path.dirname(file_path)
folder_name = os.path.basename(folder_path)
detail = file_uploaded_msg_to_json(filename, repo_id, folder_path)
UserNotification.objects.add_file_uploaded_msg(owner, detail)
@receiver(upload_file_successful)
def add_upload_file_msg_cb(sender, **kwargs):
"""Notify repo owner when others upload files to his/her folder from shared link.
"""
repo_id = kwargs.get('repo_id', None)
file_path = kwargs.get('file_path', None)
owner = kwargs.get('owner', None)
assert repo_id and file_path and owner is not None, 'Arguments error'
filename = os.path.basename(file_path)
folder_path = os.path.dirname(file_path)
folder_name = os.path.basename(folder_path)
detail = file_uploaded_msg_to_json(filename, repo_id, folder_path) detail = file_uploaded_msg_to_json(filename, repo_id, folder_path)
UserNotification.objects.add_file_uploaded_msg(owner, detail) UserNotification.objects.add_file_uploaded_msg(owner, detail)
@@ -641,6 +685,24 @@ def add_share_repo_msg_cb(sender, **kwargs):
detail = repo_share_msg_to_json(from_user, repo.id) detail = repo_share_msg_to_json(from_user, repo.id)
UserNotification.objects.add_repo_share_msg(to_user, detail) UserNotification.objects.add_repo_share_msg(to_user, detail)
@receiver(share_repo_to_group_successful)
def add_share_repo_to_group_msg_cb(sender, **kwargs):
"""Notify group member when others share repos to group.
"""
from_user = kwargs.get('from_user', None)
group_id = kwargs.get('group_id', None)
repo = kwargs.get('repo', None)
assert from_user and group_id and repo is not None, 'Arguments error'
members = ccnet_api.get_group_members(int(group_id))
for member in members:
to_user = member.user_name
if to_user == from_user:
continue
detail = repo_share_to_group_msg_to_json(from_user, repo.id, group_id)
UserNotification.objects.add_repo_share_to_group_msg(to_user, detail)
@receiver(user_message_sent) @receiver(user_message_sent)
def add_user_message_cb(sender, **kwargs): def add_user_message_cb(sender, **kwargs):
"""Notify user when he/she got a new mesaage. """Notify user when he/she got a new mesaage.

View File

@@ -32,6 +32,9 @@ You've got {{num}} new notices on {{ site_name }}:
{% elif notice.is_repo_share_msg %} {% elif notice.is_repo_share_msg %}
<p style="line-height:1.5; margin:.2em 10px .2em 0;">{% blocktrans with user=notice.notice_from lib_url=notice.repo_url lib_name=notice.repo_name%}{{user}} has shared a library named <a href="{{url_base}}{{lib_url}}">{{lib_name}}</a> to you.{% endblocktrans %}</p> <p style="line-height:1.5; margin:.2em 10px .2em 0;">{% blocktrans with user=notice.notice_from lib_url=notice.repo_url lib_name=notice.repo_name%}{{user}} has shared a library named <a href="{{url_base}}{{lib_url}}">{{lib_name}}</a> to you.{% endblocktrans %}</p>
{% elif notice.is_repo_share_to_group_msg %}
<p style="line-height:1.5; margin:.2em 10px .2em 0;">{% blocktrans with user=notice.notice_from lib_url=notice.repo_url lib_name=notice.repo_name group_url=notice.group_url group_name=notice.group_name %}{{user}} has shared a library named <a href="{{url_base}}{{lib_url}}">{{lib_name}}</a> to <a href="{{url_base}}{{group_url}}">{{group_name}}</a>.{% endblocktrans %}</p>
{% elif notice.is_user_message %} {% elif notice.is_user_message %}
<p style="line-height:1.5; margin:.2em 10px .2em 0;">{% blocktrans with msg_url=notice.user_msg_url user=notice.notice_from %}You have received a <a href="{{ url_base }}{{msg_url}}">new message</a> from {{user}}.{% endblocktrans %}</p> <p style="line-height:1.5; margin:.2em 10px .2em 0;">{% blocktrans with msg_url=notice.user_msg_url user=notice.notice_from %}You have received a <a href="{{ url_base }}{{msg_url}}">new message</a> from {{user}}.{% endblocktrans %}</p>
{% if notice.user_msg %} {% if notice.user_msg %}

View File

@@ -32,6 +32,9 @@
{% elif notice.is_repo_share_msg %} {% elif notice.is_repo_share_msg %}
<p class="brief">{{ notice.format_repo_share_msg|safe }}</p> <p class="brief">{{ notice.format_repo_share_msg|safe }}</p>
{% elif notice.is_repo_share_to_group_msg %}
<p class="brief">{{ notice.format_repo_share_to_group_msg|safe }}</p>
{% elif notice.is_group_join_request %} {% elif notice.is_group_join_request %}
<p class="brief">{{ notice.format_group_join_request|safe }}</p> <p class="brief">{{ notice.format_group_join_request|safe }}</p>
{% endif %} {% endif %}

View File

@@ -163,6 +163,14 @@ def add_notice_from_info(notices):
logger.error(e) logger.error(e)
notice.default_avatar_url = default_avatar_url notice.default_avatar_url = default_avatar_url
elif notice.is_repo_share_to_group_msg():
try:
d = json.loads(notice.detail)
notice.msg_from = d['share_from']
except Exception as e:
logger.error(e)
notice.default_avatar_url = default_avatar_url
elif notice.is_group_join_request(): elif notice.is_group_join_request():
try: try:
d = json.loads(notice.detail) d = json.loads(notice.detail)

View File

@@ -1,3 +1,4 @@
import django.dispatch import django.dispatch
share_repo_to_user_successful = django.dispatch.Signal(providing_args=["from_user", "to_user", "repo"]) share_repo_to_user_successful = django.dispatch.Signal(providing_args=["from_user", "to_user", "repo"])
share_repo_to_group_successful = django.dispatch.Signal(providing_args=["from_user", "group_id", "repo"])

View File

@@ -30,6 +30,9 @@
{% elif notice.is_repo_share_msg %} {% elif notice.is_repo_share_msg %}
<p class="brief">{{ notice.format_repo_share_msg|safe }}</p> <p class="brief">{{ notice.format_repo_share_msg|safe }}</p>
{% elif notice.is_repo_share_to_group_msg %}
<p class="brief">{{ notice.format_repo_share_to_group_msg|safe }}</p>
{% elif notice.is_group_join_request %} {% elif notice.is_group_join_request %}
<p class="brief">{{ notice.format_group_join_request|safe }}</p> <p class="brief">{{ notice.format_group_join_request|safe }}</p>