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:
@@ -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": {
|
||||||
|
@@ -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
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
@@ -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.
|
||||||
|
@@ -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 %}
|
||||||
|
@@ -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 %}
|
||||||
|
@@ -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)
|
||||||
|
@@ -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"])
|
||||||
|
@@ -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>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user