1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-05-10 08:55:02 +00:00

fix notifications url ()

This commit is contained in:
C_Q 2019-01-08 10:56:00 +08:00 committed by zheng xie
parent 855f026596
commit db2d0e01e7
15 changed files with 72 additions and 72 deletions

View File

@ -19,11 +19,7 @@ DAILY_ADMIN = 'daily_admin'
AUDIT_ADMIN = 'audit_admin'
HASH_URLS = {
'VIEW_COMMON_LIB_DIR': settings.SITE_ROOT + '#common/lib/%(repo_id)s/%(path)s',
'GROUP_INFO': settings.SITE_ROOT + '#group/%(group_id)s/',
'GROUP_MEMBERS': settings.SITE_ROOT + '#group/%(group_id)s/members/',
'GROUP_DISCUSS': settings.SITE_ROOT + '#group/%(group_id)s/discussions/',
'GROUP_LIST': settings.SITE_ROOT + '#groups/',
'SYS_REPO_ADMIN': settings.SITE_ROOT + 'sysadmin/#all-libs/',
}

View File

@ -40,7 +40,6 @@ from seahub.views import is_registered_user, check_folder_permission
from seahub.views.modules import get_enabled_mods_by_group, \
get_available_mods_by_group
from seahub.share.models import ExtraGroupsSharePermission
from seahub.constants import HASH_URLS
from seahub.forms import SharedRepoCreateForm
@ -96,7 +95,8 @@ def group_check(func):
group_id_int = int(group_id) # Checked by URL Conf
group = get_group(group_id_int)
if not group:
return HttpResponseRedirect(HASH_URLS['GROUP_LIST'])
group_list_url = reverse('groups')
return HttpResponseRedirect(group_list_url)
group.is_staff = False
if PublicGroup.objects.filter(group_id=group.id):
group.is_pub = True

View File

@ -35,18 +35,18 @@ def td(con):
def a_tag(con, href='#', style=''):
return '<a href="%s" style="%s">%s</a>' % (href, style, e(con))
def repo_url(repo_id):
p = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id, 'path': ''}
def repo_url(repo_id, repo_name):
p = reverse('lib_view', args=[repo_id, repo_name, ''])
return get_site_scheme_and_netloc() + p
def file_url(repo_id, file_path):
p = reverse('view_lib_file', args=[repo_id, file_path])
return get_site_scheme_and_netloc() + p
def dir_url(repo_id, dir_path):
p = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {
'repo_id': repo_id, 'path': dir_path.strip('/')
}
def dir_url(repo_id, repo_name, dir_path):
p = reverse('lib_view', args=[repo_id, repo_name, dir_path.strip('/')])
return get_site_scheme_and_netloc() + p
def user_info_url(username):
@ -100,8 +100,8 @@ class Command(BaseCommand):
return Profile.objects.get_user_language(username)
def format_file_operation(self, ev):
lib_link = a_tag(ev.repo_name, repo_url(ev.repo_id))
small_lib_link = a_tag(ev.repo_name, repo_url(ev.repo_id), 'color:#868e96;font-size:87.5%;')
lib_link = a_tag(ev.repo_name, repo_url(ev.repo_id, ev.repo_name))
small_lib_link = a_tag(ev.repo_name, repo_url(ev.repo_id, ev.repo_name), 'color:#868e96;font-size:87.5%;')
if ev.obj_type == 'repo':
if ev.op_type == 'create':
op = _('Created library')
@ -153,7 +153,7 @@ class Command(BaseCommand):
else: # dir
dir_name = os.path.basename(ev.path)
dir_link = a_tag(dir_name, dir_url(ev.repo_id, ev.path))
dir_link = a_tag(dir_name, dir_url(ev.repo_id, ev.repo_name, ev.path))
if ev.op_type == 'create':
op = _('Created folder')
details = td('%s<br />%s' % (dir_link, small_lib_link))

View File

@ -98,7 +98,8 @@ class Command(BaseCommand):
owner = seafile_api.get_repo_owner(repo_id)
repo = seafile_api.get_virtual_repo(repo_id, path, owner)
notice.repo_url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id, 'path': ''}
repo_url = reverse('lib_view', args=[repo_id, repo.name, ''])
notice.repo_url = repo_url
notice.notice_from = escape(email2nickname(d['share_from']))
notice.repo_name = repo.name
notice.avatar_src = self.get_avatar_src(d['share_from'])
@ -128,11 +129,12 @@ class Command(BaseCommand):
owner = seafile_api.get_repo_owner(repo_id)
repo = seafile_api.get_virtual_repo(repo_id, path, owner)
notice.repo_url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id, 'path': ''}
repo_url = reverse('lib_view', args=[repo_id, repo.name, ''])
notice.repo_url = repo_url
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 = HASH_URLS['GROUP_INFO'] % {'group_id': group.id}
notice.group_url = reverse('group', args=[group.id])
notice.group_name = group.group_name
notice.shared_type = shared_type
@ -143,10 +145,12 @@ class Command(BaseCommand):
file_name = d['file_name']
repo_id = d['repo_id']
repo = seafile_api.get_repo(repo_id)
uploaded_to = d['uploaded_to'].rstrip('/')
file_path = uploaded_to + '/' + file_name
file_link = reverse('view_lib_file', args=[repo_id, file_path])
folder_link = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id, 'path': uploaded_to.strip('/')}
folder_link = reverse('lib_view', args=[repo_id, repo.name, uploaded_to.strip('/')])
folder_name = os.path.basename(uploaded_to)
notice.file_link = file_link
@ -184,7 +188,7 @@ class Command(BaseCommand):
notice.avatar_src = self.get_avatar_src(group_staff)
notice.group_staff_profile_url = reverse('user_profile',
args=[group_staff])
notice.group_url = HASH_URLS['GROUP_INFO'] % {'group_id': group_id}
notice.group_url = reverse('group', args=[group.id])
notice.group_name = group.group_name
return notice

View File

@ -5,6 +5,7 @@ import os
import json
import logging
from django.core.urlresolvers import reverse
from django.db import models
from django.conf import settings
from django.forms import ModelForm, Textarea
@ -505,15 +506,13 @@ class UserNotification(models.Model):
if d['uploaded_to'] == '/':
# current upload path is '/'
file_path = '/' + filename
link = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id, 'path': ''}
link = reverse('lib_view', args=[repo_id, repo.name, ''])
name = repo.name
else:
uploaded_to = d['uploaded_to'].rstrip('/')
file_path = uploaded_to + '/' + filename
link = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id,
'path': uploaded_to.lstrip('/')}
link = reverse('lib_view', args=[repo_id, repo.name, uploaded_to.lstrip('/')])
name = os.path.basename(uploaded_to)
file_link = reverse('view_lib_file', args=[repo_id, file_path])
msg = _(u"A file named <a href='%(file_link)s'>%(file_name)s</a> is uploaded to <a href='%(link)s'>%(name)s</a>") % {
@ -571,12 +570,10 @@ class UserNotification(models.Model):
else:
tmpl = 'notifications/notice_msg/folder_share_msg.html'
lib_url = reverse('lib_view', args=[repo.id, repo.name, ''])
msg = render_to_string(tmpl, {
'user': share_from,
'lib_url': HASH_URLS["VIEW_COMMON_LIB_DIR"] % {
'repo_id': repo.id,
'path': ''
},
'lib_url': lib_url,
'lib_name': repo.name,
})
@ -626,14 +623,13 @@ class UserNotification(models.Model):
else:
tmpl = 'notifications/notice_msg/folder_share_to_group_msg.html'
lib_url = reverse('lib_view', args=[repo.id, repo.name, ''])
group_url = reverse('group', args=[group.id])
msg = render_to_string(tmpl, {
'user': share_from,
'lib_url': HASH_URLS["VIEW_COMMON_LIB_DIR"] % {
'repo_id': repo.id,
'path': ''
},
'lib_url': lib_url,
'lib_name': repo.name,
'group_url': HASH_URLS['GROUP_INFO'] % {'group_id': group.id},
'group_url': group_url,
'group_name': group.group_name,
})
@ -742,7 +738,7 @@ class UserNotification(models.Model):
msg = _(u"User <a href='%(user_profile)s'>%(group_staff)s</a> has added you to group <a href='%(href)s'>%(group_name)s</a>") % {
'user_profile': reverse('user_profile', args=[group_staff]),
'group_staff': escape(email2nickname(group_staff)),
'href': HASH_URLS['GROUP_INFO'] % {'group_id': group_id},
'href': reverse('group', args=[group_id]),
'group_name': escape(group.group_name)}
return msg
@ -858,7 +854,6 @@ class UserNotification(models.Model):
########## handle signals
from django.core.urlresolvers import reverse
from django.dispatch import receiver
from seahub.signals import upload_file_successful, comment_file_successful

View File

@ -204,8 +204,8 @@ urlpatterns = [
url(r'^shared-libs/$', react_fake_view, name="shared_libs"),
url(r'^my-libs/$', react_fake_view, name="my_libs"),
url(r'^groups/$', react_fake_view, name="groups"),
url(r'^group/.*$', react_fake_view, name="group"),
url(r'^library/.*$', react_fake_view, name="lib_view"),
url(r'^group/(?P<group_id>\d+)/$', react_fake_view, name="group"),
url(r'^library/(?P<repo_id>[-0-9a-f]{36})/(?P<repo_name>[^/]+)/(?P<path>.*)$', react_fake_view, name="lib_view"),
url(r'^my-libs/deleted/$', react_fake_view, name="my_libs_deleted"),
url(r'^org/$', react_fake_view, name="org"),

View File

@ -180,8 +180,7 @@ def get_repo_dirents(request, repo, commit, path, offset=-1, limit=-1):
fileshares = FileShare.objects.filter(repo_id=repo.id).filter(username=username)
uploadlinks = UploadLinkShare.objects.filter(repo_id=repo.id).filter(username=username)
view_dir_base = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo.id, 'path': ''}
view_dir_base = reverse('lib_view', args=[repo.id, repo.name, ''])
dl_dir_base = reverse('repo_download_dir', args=[repo.id])
file_history_base = reverse('file_revisions', args=[repo.id])
for dirent in dirs:
@ -466,7 +465,7 @@ def repo_history(request, repo_id):
return render_error(request, e.msg)
if not password_set:
reverse_url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id, 'path': ''}
reverse_url = reverse('lib_view', args=[repo_id, repo.name, ''])
return HttpResponseRedirect(reverse_url)
try:
@ -551,7 +550,7 @@ def repo_revert_history(request, repo_id):
return render_error(request, e.msg)
if not password_set:
reverse_url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id, 'path': ''}
reverse_url = reverse('lib_view', args=[repo_id, repo.name, ''])
return HttpResponseRedirect(reverse_url)
commit_id = request.GET.get('commit_id', '')
@ -576,8 +575,8 @@ def repo_revert_history(request, repo_id):
def fpath_to_link(repo_id, path, is_dir=False):
"""Translate file path of a repo to its view link"""
if is_dir:
href = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id, 'path': path.strip('/')}
href = urlquote(href, safe='/#')
repo = seafile_api.get_repo(repo_id)
href = reverse('lib_view', args=[repo_id, repo.name, path.strip('/')])
else:
if not path.startswith('/'):
p = '/' + path
@ -754,7 +753,8 @@ def libraries(request):
def repo_set_access_property(request, repo_id):
ap = request.GET.get('ap', '')
seafserv_threaded_rpc.repo_set_access_property(repo_id, ap)
reverse_url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id, 'path': ''}
repo = seafile_api.get_repo(repo_id)
reverse_url = reverse('lib_view', args=[repo_id, repo.name, ''])
return HttpResponseRedirect(reverse_url)
@ -1051,13 +1051,13 @@ def convert_cmmt_desc_link(request):
elif d.status == 'mov': # Move or Rename non-empty file/folder
if '/' in d.new_name:
new_dir_name = d.new_name.split('/')[0]
reverse_url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id, 'path': new_dir_name}
reverse_url = reverse('lib_view', args=[repo_id, repo.name, new_dir_name])
return HttpResponseRedirect(reverse_url)
else:
return HttpResponseRedirect(
reverse('view_lib_file', args=[repo_id, '/' + d.new_name]))
elif d.status == 'newdir':
reverse_url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id, 'path': d.name.strip('/')},
reverse_url = reverse('lib_view', args=[repo_id, repo.name, d.name.strip('/')])
return HttpResponseRedirect(reverse_url)
else:
continue
@ -1214,7 +1214,7 @@ def choose_register(request):
})
@login_required
def react_fake_view(request):
def react_fake_view(request, **kwargs):
return render(request, "react_app.html", {
'seafile_collab_server': SEAFILE_COLLAB_SERVER,

View File

@ -817,8 +817,8 @@ def mv_dirents(request, src_repo_id, src_path, dst_repo_id, dst_path,
success.append(obj_name)
if len(success) > 0:
url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': dst_repo_id, 'path': dst_path.strip('/')},
dst_repo = seafile_api.get_repo(dst_repo_id)
url = reverse('lib_view', args=[dst_repo_id, dst_repo.name, dst_path.strip('/')])
result = {'success': success, 'failed': failed, 'url': url}
return HttpResponse(json.dumps(result), content_type=content_type)
@ -890,8 +890,8 @@ def cp_dirents(request, src_repo_id, src_path, dst_repo_id, dst_path, obj_file_n
success.append(obj_name)
if len(success) > 0:
url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': dst_repo_id, 'path': dst_path.strip('/')},
dst_repo = seafile_api.get_repo(dst_repo_id)
url = reverse('lib_view', args=[dst_repo_id, dst_repo.name, dst_path.strip('/')])
result = {'success': success, 'failed': failed, 'url': url}
return HttpResponse(json.dumps(result), content_type=content_type)

View File

@ -1676,7 +1676,7 @@ def download_file(request, repo_id, obj_id):
raise Http404
if repo.encrypted and not seafile_api.is_password_set(repo_id, username):
reverse_url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id, 'path': ''}
reverse_url = reverse('lib_view', args=[repo_id, repo.name, ''])
return HttpResponseRedirect(reverse_url)
# only check the permissions at the repo level

View File

@ -4,6 +4,7 @@ import os
import posixpath
import logging
from django.core.urlresolvers import reverse
from django.db.models import F
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import render
@ -115,7 +116,7 @@ def repo_history_view(request, repo_id):
# Assume server_crypto is ``False`` if this option is not set.
server_crypto = False
reverse_url = HASH_URLS["VIEW_COMMON_LIB_DIR"] % {'repo_id': repo_id, 'path': ''}
reverse_url = reverse('lib_view', args=[repo_id, repo.name, ''])
if repo.encrypted and \
(repo.enc_version == 1 or (repo.enc_version == 2 and server_crypto)) \
and not is_password_set(repo.id, username):

View File

@ -127,8 +127,8 @@ class CommandTest(BaseTestCase):
notice = UserNotification.objects.add_repo_share_msg('to@to.com', detail)
resp = Command().format_repo_share_msg(notice)
assert resp.repo_url == '/#common/lib/%(repo_id)s/%(path)s' % {'repo_id': self.repo.id,
'path': ''}
assert resp.repo_url == '/library/%(repo_id)s/%(repo_name)s/%(path)s' % {
'repo_id': self.repo.id, 'repo_name': self.repo.name, 'path': ''}
def test_format_group_message(self):
detail = group_msg_to_json(self.group.id, 'from@email.com', 'message')
@ -144,9 +144,9 @@ class CommandTest(BaseTestCase):
notice = UserNotification.objects.add_repo_share_to_group_msg('group@share.com', detail)
resp = Command().format_repo_share_to_group_msg(notice)
assert resp.repo_url == '/#common/lib/%(repo_id)s/%(path)s' % {'repo_id': self.repo.id,
'path': ''}
assert resp.group_url == '/#group/%(group_id)s/' % {'group_id': self.group.id}
assert resp.repo_url == '/library/%(repo_id)s/%(repo_name)s/%(path)s' % {
'repo_id': self.repo.id, 'repo_name': self.repo.name, 'path': ''}
assert resp.group_url == '/group/%(group_id)s/' % {'group_id': self.group.id}
def test_format_file_uploaded_msg(self):
upload_to = '/'
@ -154,8 +154,8 @@ class CommandTest(BaseTestCase):
notice = UserNotification.objects.add_file_uploaded_msg('file@upload.com', detail)
resp = Command().format_file_uploaded_msg(notice)
assert resp.folder_link == '/#common/lib/%(repo_id)s/%(path)s' % {'repo_id': self.repo.id,
'path': upload_to.strip('/')}
assert resp.folder_link == '/library/%(repo_id)s/%(repo_name)s/%(path)s' % {
'repo_id': self.repo.id, 'repo_name': self.repo.name, 'path': upload_to.strip('/')}
def test_format_group_join_request(self):
detail = group_join_request_to_json('group_join', self.group.id, 'join_request_msg')
@ -171,4 +171,4 @@ class CommandTest(BaseTestCase):
detail=detail)
resp = Command().format_add_user_to_group(notice)
assert resp.group_url == '/#group/%(group_id)s/' % {'group_id': self.group.id}
assert resp.group_url == '/group/%(group_id)s/' % {'group_id': self.group.id}

View File

@ -25,7 +25,8 @@ class UserNotificationTest(BaseTestCase):
notice = UserNotification.objects.add_file_uploaded_msg('file@upload.com', detail)
msg = notice.format_file_uploaded_msg()
assert '/#common/lib/%(repo_id)s/%(path)s' % {'repo_id': self.repo.id,
assert '/library/%(repo_id)s/%(repo_name)s/%(path)s' % {'repo_id': self.repo.id,
'repo_name': self.repo.name,
'path': upload_to.strip('/')} in msg
def test_format_group_message_title(self):
@ -46,7 +47,7 @@ class UserNotificationTest(BaseTestCase):
notice = UserNotification.objects.set_add_user_to_group_notice(self.user.username,
detail=detail)
msg = notice.format_add_user_to_group()
assert '/#group/%(group_id)s/' % {'group_id': self.group.id} in msg
assert '/group/%(group_id)s/' % {'group_id': self.group.id} in msg
def test_format_repo_share_msg(self):
notice = UserNotification.objects.add_repo_share_msg(
@ -56,8 +57,10 @@ class UserNotificationTest(BaseTestCase):
msg = notice.format_repo_share_msg()
assert msg is not None
assert 'bar has shared a library named' in msg
assert '/#common/lib/%(repo_id)s/%(path)s' % {'repo_id': self.repo.id,
'path': ''} in msg
assert '/library/%(repo_id)s/%(repo_name)s/%(path)s' % {
'repo_id': self.repo.id,
'repo_name': self.repo.name,
'path': ''} in msg
def test_format_repo_share_msg_with_folder(self):
folder_path = self.folder
@ -79,7 +82,7 @@ class UserNotificationTest(BaseTestCase):
msg = notice.format_repo_share_to_group_msg()
assert msg is not None
assert 'bar has shared a library named' in msg
assert '/#group/%(group_id)s/' % {'group_id': self.group.id} in msg
assert '/group/%(group_id)s/' % {'group_id': self.group.id} in msg
def test_format_repo_share_to_group_msg_with_folder(self):
folder_path = self.folder

View File

@ -8,7 +8,8 @@ class FpathToLinkTest(BaseTestCase):
def test_fpath_to_link(self):
path = '/海文/'.decode('utf-8')
resp = fpath_to_link(self.repo.id, path, is_dir=True)
url = '/#common/lib/%(repo_id)s/%(path)s' % {'repo_id': self.repo.id,
url = '/library/%(repo_id)s/%(repo_name)s/%(path)s' % {'repo_id': self.repo.id,
'repo_name': self.repo.name,
'path': path.strip('/')}
assert urlquote(url, safe='/#') in resp
assert urlquote(url) in resp

View File

@ -17,5 +17,5 @@ class RepoHistoryTest(BaseTestCase):
resp = self.client.get(reverse('repo_history', args=[self.enc_repo.id]))
self.assertEqual(302, resp.status_code)
assert '/#common/lib/%(repo_id)s/%(path)s' % {
'repo_id': self.enc_repo.id, 'path': ''} in resp.url
assert '/library/%(repo_id)s/%(repo_name)s/%(path)s' % {
'repo_id': self.enc_repo.id, 'repo_name': self.enc_repo.name, 'path': ''} in resp.url

View File

@ -17,5 +17,5 @@ class RepoRevertHistoryTest(BaseTestCase):
resp = self.client.post(reverse('repo_revert_history', args=[self.enc_repo.id]) + '?commit_id=xxx', {})
self.assertEqual(302, resp.status_code)
assert '/#common/lib/%(repo_id)s/%(path)s' % {
'repo_id': self.enc_repo.id, 'path': ''} in resp.url
assert '/library/%(repo_id)s/%(repo_name)s/%(path)s' % {
'repo_id': self.enc_repo.id, 'repo_name': self.enc_repo.name, 'path': ''} in resp.url