mirror of
https://github.com/haiwen/seahub.git
synced 2025-07-15 16:04:01 +00:00
Drop wiki2 tables (#6373)
* wiki2-drop-wiki-tables * Update models.py * update * Update wiki2.py
This commit is contained in:
parent
67780dd73d
commit
8dc731b21a
@ -30,7 +30,7 @@ class WikiCardView extends Component {
|
|||||||
if (!canPublishRepo || !isPro) return;
|
if (!canPublishRepo || !isPro) return;
|
||||||
let departmentMap = {};
|
let departmentMap = {};
|
||||||
wikiAPI.listWikiDepartments().then(res => {
|
wikiAPI.listWikiDepartments().then(res => {
|
||||||
res.data.forEach(item => departmentMap[item.id] = true);
|
res.data.forEach(item => departmentMap[item.email] = true);
|
||||||
this.setState({ departmentMap });
|
this.setState({ departmentMap });
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
let errMessage = Utils.getErrorMsg(error);
|
let errMessage = Utils.getErrorMsg(error);
|
||||||
|
@ -21,7 +21,7 @@ from django.utils.translation import gettext as _
|
|||||||
|
|
||||||
from seahub.api2.authentication import TokenAuthentication
|
from seahub.api2.authentication import TokenAuthentication
|
||||||
from seahub.api2.throttling import UserRateThrottle
|
from seahub.api2.throttling import UserRateThrottle
|
||||||
from seahub.api2.utils import api_error, to_python_boolean
|
from seahub.api2.utils import api_error, to_python_boolean, is_wiki_repo
|
||||||
from seahub.utils.db_api import SeafileDB
|
from seahub.utils.db_api import SeafileDB
|
||||||
from seahub.wiki2.models import Wiki2 as Wiki
|
from seahub.wiki2.models import Wiki2 as Wiki
|
||||||
from seahub.wiki2.utils import is_valid_wiki_name, can_edit_wiki, get_wiki_dirs_by_path, \
|
from seahub.wiki2.utils import is_valid_wiki_name, can_edit_wiki, get_wiki_dirs_by_path, \
|
||||||
@ -36,12 +36,12 @@ from seahub.views import check_folder_permission
|
|||||||
from seahub.views.file import send_file_access_msg
|
from seahub.views.file import send_file_access_msg
|
||||||
from seahub.base.templatetags.seahub_tags import email2nickname
|
from seahub.base.templatetags.seahub_tags import email2nickname
|
||||||
from seahub.utils.file_op import check_file_lock, ONLINE_OFFICE_LOCK_OWNER, if_locked_by_online_office
|
from seahub.utils.file_op import check_file_lock, ONLINE_OFFICE_LOCK_OWNER, if_locked_by_online_office
|
||||||
from seahub.utils.repo import parse_repo_perm
|
from seahub.utils.repo import parse_repo_perm, get_repo_owner
|
||||||
from seahub.seadoc.utils import get_seadoc_file_uuid, gen_seadoc_access_token, copy_sdoc_images_with_sdoc_uuid
|
from seahub.seadoc.utils import get_seadoc_file_uuid, gen_seadoc_access_token, copy_sdoc_images_with_sdoc_uuid
|
||||||
from seahub.settings import SEADOC_SERVER_URL, ENABLE_STORAGE_CLASSES, STORAGE_CLASS_MAPPING_POLICY, \
|
from seahub.settings import SEADOC_SERVER_URL, ENABLE_STORAGE_CLASSES, STORAGE_CLASS_MAPPING_POLICY, \
|
||||||
ENCRYPTED_LIBRARY_VERSION
|
ENCRYPTED_LIBRARY_VERSION
|
||||||
from seahub.seadoc.sdoc_server_api import SdocServerAPI
|
from seahub.seadoc.sdoc_server_api import SdocServerAPI
|
||||||
from seahub.utils.timeutils import timestamp_to_isoformat_timestr
|
from seahub.utils.timeutils import timestamp_to_isoformat_timestr, datetime_to_isoformat_timestr
|
||||||
from seahub.tags.models import FileUUIDMap
|
from seahub.tags.models import FileUUIDMap
|
||||||
from seahub.seadoc.models import SeadocHistoryName, SeadocDraft, SeadocCommentReply
|
from seahub.seadoc.models import SeadocHistoryName, SeadocDraft, SeadocCommentReply
|
||||||
from seahub.base.models import FileComment
|
from seahub.base.models import FileComment
|
||||||
@ -85,32 +85,41 @@ class Wikis2View(APIView):
|
|||||||
org_id = request.user.org.org_id if is_org_context(request) else None
|
org_id = request.user.org.org_id if is_org_context(request) else None
|
||||||
(owned, shared, groups, public) = get_user_repos(username, org_id)
|
(owned, shared, groups, public) = get_user_repos(username, org_id)
|
||||||
|
|
||||||
filter_repo_ids = []
|
wikis = []
|
||||||
|
username = request.user.username
|
||||||
if filter_by['mine']:
|
if filter_by['mine']:
|
||||||
filter_repo_ids += ([r.id for r in owned])
|
owned_wikis = [r for r in owned if is_wiki_repo(r)]
|
||||||
|
for r in owned_wikis:
|
||||||
|
r.owner = username
|
||||||
|
r.permission = 'rw'
|
||||||
|
wikis.append(r)
|
||||||
|
|
||||||
if filter_by['shared']:
|
if filter_by['shared']:
|
||||||
filter_repo_ids += ([r.id for r in shared])
|
shared_wikis = [r for r in shared if is_wiki_repo(r)]
|
||||||
|
for r in shared_wikis:
|
||||||
|
r.owner = r.user
|
||||||
|
wikis.append(r)
|
||||||
|
|
||||||
if filter_by['group']:
|
if filter_by['group']:
|
||||||
filter_repo_ids += ([r.id for r in groups])
|
group_wikis = [r for r in groups if is_wiki_repo(r)]
|
||||||
|
for r in group_wikis:
|
||||||
if filter_by['org']:
|
r.owner = r.user
|
||||||
filter_repo_ids += ([r.id for r in public])
|
wikis.append(r)
|
||||||
|
|
||||||
filter_repo_ids = list(set(filter_repo_ids))
|
|
||||||
|
|
||||||
wikis = Wiki.objects.filter(repo_id__in=filter_repo_ids)
|
|
||||||
|
|
||||||
|
wikis = list(set(wikis))
|
||||||
wiki_list = []
|
wiki_list = []
|
||||||
for wiki in wikis:
|
for w in wikis:
|
||||||
|
wiki = Wiki(w)
|
||||||
wiki_info = wiki.to_dict()
|
wiki_info = wiki.to_dict()
|
||||||
if is_group_wiki(wiki):
|
if is_group_wiki(wiki):
|
||||||
wiki_info['owner_nickname'] = group_id_to_name(wiki.owner)
|
group_id = int(wiki.owner.split('@')[0])
|
||||||
|
wiki_info['owner_nickname'] = group_id_to_name(group_id)
|
||||||
else:
|
else:
|
||||||
wiki_info['owner_nickname'] = email2nickname(wiki.owner)
|
wiki_info['owner_nickname'] = email2nickname(wiki.owner)
|
||||||
wiki_list.append(wiki_info)
|
wiki_list.append(wiki_info)
|
||||||
|
|
||||||
|
wiki_list = sorted(wiki_list, key=lambda x: x.get('updated_at'), reverse=True)
|
||||||
|
|
||||||
return Response({'wikis': wiki_list})
|
return Response({'wikis': wiki_list})
|
||||||
|
|
||||||
def post(self, request, format=None):
|
def post(self, request, format=None):
|
||||||
@ -138,6 +147,7 @@ class Wikis2View(APIView):
|
|||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
group_id = int(wiki_owner)
|
group_id = int(wiki_owner)
|
||||||
|
wiki_owner = "%s@seafile_group" % group_id
|
||||||
except:
|
except:
|
||||||
return api_error(status.HTTP_400_BAD_REQUEST, 'wiki_owner invalid')
|
return api_error(status.HTTP_400_BAD_REQUEST, 'wiki_owner invalid')
|
||||||
is_group_owner = True
|
is_group_owner = True
|
||||||
@ -187,7 +197,6 @@ class Wikis2View(APIView):
|
|||||||
repo_id = seafile_api.create_repo(wiki_name, '', username)
|
repo_id = seafile_api.create_repo(wiki_name, '', username)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
wiki = Wiki.objects.add(wiki_name=wiki_name, owner=wiki_owner, repo_id=repo_id)
|
|
||||||
seafile_db_api = SeafileDB()
|
seafile_db_api = SeafileDB()
|
||||||
seafile_db_api.set_repo_type(repo_id, 'wiki')
|
seafile_db_api.set_repo_type(repo_id, 'wiki')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -195,11 +204,14 @@ class Wikis2View(APIView):
|
|||||||
msg = 'Internal Server Error'
|
msg = 'Internal Server Error'
|
||||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, msg)
|
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, msg)
|
||||||
|
|
||||||
|
repo = seafile_api.get_repo(repo_id)
|
||||||
|
wiki = Wiki(repo, wiki_owner)
|
||||||
wiki_info = wiki.to_dict()
|
wiki_info = wiki.to_dict()
|
||||||
if not is_group_owner:
|
if not is_group_owner:
|
||||||
wiki_info['owner_nickname'] = email2nickname(wiki.owner)
|
wiki_info['owner_nickname'] = email2nickname(wiki.owner)
|
||||||
else:
|
else:
|
||||||
wiki_info['owner_nickname'] = group_id_to_name(wiki.owner)
|
group_id = int(wiki.owner.split('@')[0])
|
||||||
|
wiki_info['owner_nickname'] = group_id_to_name(group_id)
|
||||||
|
|
||||||
return Response(wiki_info)
|
return Response(wiki_info)
|
||||||
|
|
||||||
@ -218,35 +230,30 @@ class Wiki2View(APIView):
|
|||||||
return api_error(status.HTTP_400_BAD_REQUEST, 'name invalid.')
|
return api_error(status.HTTP_400_BAD_REQUEST, 'name invalid.')
|
||||||
|
|
||||||
username = request.user.username
|
username = request.user.username
|
||||||
try:
|
|
||||||
wiki = Wiki.objects.get(id=wiki_id)
|
wiki = Wiki.objects.get(wiki_id=wiki_id)
|
||||||
except Wiki.DoesNotExist:
|
if not wiki:
|
||||||
error_msg = 'Wiki not found.'
|
error_msg = 'Wiki not found.'
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
if not check_wiki_admin_permission(wiki, username):
|
|
||||||
error_msg = 'Permission denied.'
|
|
||||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
|
||||||
|
|
||||||
if wiki_name == wiki.name:
|
if wiki_name == wiki.name:
|
||||||
return Response({"success": True})
|
return Response({"success": True})
|
||||||
|
|
||||||
repo_id = wiki.repo_id
|
repo_id = wiki.repo_id
|
||||||
repo = seafile_api.get_repo(repo_id)
|
repo = seafile_api.get_repo(repo_id)
|
||||||
|
|
||||||
if not repo:
|
if not repo:
|
||||||
error_msg = "Wiki library not found."
|
error_msg = "Wiki library not found."
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
|
repo_owner = get_repo_owner(request, wiki_id)
|
||||||
|
wiki.owner = repo_owner
|
||||||
|
|
||||||
if not check_wiki_admin_permission(wiki, username):
|
if not check_wiki_admin_permission(wiki, username):
|
||||||
error_msg = 'Permission denied.'
|
error_msg = 'Permission denied.'
|
||||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||||
|
|
||||||
if not is_group_wiki(wiki):
|
if not is_group_wiki(wiki):
|
||||||
if is_org_context(request):
|
|
||||||
repo_owner = seafile_api.get_org_repo_owner(repo.id)
|
|
||||||
else:
|
|
||||||
repo_owner = seafile_api.get_repo_owner(repo.id)
|
|
||||||
|
|
||||||
is_owner = True if username == repo_owner else False
|
is_owner = True if username == repo_owner else False
|
||||||
if not is_owner:
|
if not is_owner:
|
||||||
return api_error(status.HTTP_403_FORBIDDEN, 'Permission denied.')
|
return api_error(status.HTTP_403_FORBIDDEN, 'Permission denied.')
|
||||||
@ -258,40 +265,37 @@ class Wiki2View(APIView):
|
|||||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# desc is ''
|
|
||||||
seafile_api.edit_repo(repo_id, wiki_name, '', username)
|
seafile_api.edit_repo(repo_id, wiki_name, '', username)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
error_msg = 'Internal Server Error'
|
error_msg = 'Internal Server Error'
|
||||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||||
|
|
||||||
wiki.name = wiki_name
|
|
||||||
wiki.save()
|
|
||||||
|
|
||||||
return Response({"success": True})
|
return Response({"success": True})
|
||||||
|
|
||||||
def delete(self, request, wiki_id):
|
def delete(self, request, wiki_id):
|
||||||
"""Delete a wiki.
|
"""Delete a wiki.
|
||||||
"""
|
"""
|
||||||
username = request.user.username
|
username = request.user.username
|
||||||
try:
|
|
||||||
wiki = Wiki.objects.get(id=wiki_id)
|
wiki = Wiki.objects.get(wiki_id=wiki_id)
|
||||||
except Wiki.DoesNotExist:
|
if not wiki:
|
||||||
error_msg = 'Wiki not found.'
|
error_msg = 'Wiki not found.'
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
|
repo_owner = get_repo_owner(request, wiki_id)
|
||||||
|
wiki.owner = repo_owner
|
||||||
|
|
||||||
if not check_wiki_admin_permission(wiki, username):
|
if not check_wiki_admin_permission(wiki, username):
|
||||||
error_msg = 'Permission denied.'
|
error_msg = 'Permission denied.'
|
||||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||||
|
|
||||||
wiki.delete()
|
|
||||||
|
|
||||||
org_id = -1
|
org_id = -1
|
||||||
if is_org_context(request):
|
if is_org_context(request):
|
||||||
org_id = request.user.org.org_id
|
org_id = request.user.org.org_id
|
||||||
|
|
||||||
if is_group_wiki(wiki):
|
if is_group_wiki(wiki):
|
||||||
group_id = int(wiki.owner)
|
group_id = int(wiki.owner.split('@')[0])
|
||||||
try:
|
try:
|
||||||
SeafileAPI.delete_group_owned_repo(group_id, wiki.repo_id, org_id)
|
SeafileAPI.delete_group_owned_repo(group_id, wiki.repo_id, org_id)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -318,12 +322,14 @@ class Wiki2ConfigView(APIView):
|
|||||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||||
|
|
||||||
username = request.user.username
|
username = request.user.username
|
||||||
try:
|
wiki = Wiki.objects.get(wiki_id=wiki_id)
|
||||||
wiki = Wiki.objects.get(id=wiki_id)
|
if not wiki:
|
||||||
except Wiki.DoesNotExist:
|
|
||||||
error_msg = "Wiki not found."
|
error_msg = "Wiki not found."
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
|
repo_owner = get_repo_owner(request, wiki_id)
|
||||||
|
wiki.owner = repo_owner
|
||||||
|
|
||||||
if not check_wiki_permission(wiki, request.user.username):
|
if not check_wiki_permission(wiki, request.user.username):
|
||||||
error_msg = 'Permission denied.'
|
error_msg = 'Permission denied.'
|
||||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||||
@ -342,12 +348,15 @@ class Wiki2ConfigView(APIView):
|
|||||||
|
|
||||||
def get(self, request, wiki_id):
|
def get(self, request, wiki_id):
|
||||||
|
|
||||||
try:
|
|
||||||
wiki = Wiki.objects.get(id=wiki_id)
|
wiki = Wiki.objects.get(wiki_id=wiki_id)
|
||||||
except Wiki.DoesNotExist:
|
if not wiki:
|
||||||
error_msg = "Wiki not found."
|
error_msg = "Wiki not found."
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
|
repo_owner = get_repo_owner(request, wiki_id)
|
||||||
|
wiki.owner = repo_owner
|
||||||
|
|
||||||
if not check_wiki_permission(wiki, request.user.username):
|
if not check_wiki_permission(wiki, request.user.username):
|
||||||
error_msg = 'Permission denied.'
|
error_msg = 'Permission denied.'
|
||||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||||
@ -397,12 +406,15 @@ class Wiki2PagesView(APIView):
|
|||||||
error_msg = 'page_name invalid.'
|
error_msg = 'page_name invalid.'
|
||||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||||
|
|
||||||
try:
|
|
||||||
wiki = Wiki.objects.get(id=wiki_id)
|
wiki = Wiki.objects.get(wiki_id=wiki_id)
|
||||||
except Wiki.DoesNotExist:
|
if not wiki:
|
||||||
error_msg = "Wiki not found."
|
error_msg = "Wiki not found."
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
|
repo_owner = get_repo_owner(request, wiki_id)
|
||||||
|
wiki.owner = repo_owner
|
||||||
|
|
||||||
if not check_wiki_permission(wiki, request.user.username):
|
if not check_wiki_permission(wiki, request.user.username):
|
||||||
error_msg = 'Permission denied.'
|
error_msg = 'Permission denied.'
|
||||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||||
@ -487,12 +499,15 @@ class Wiki2PagesView(APIView):
|
|||||||
return Response({'file_info': file_info})
|
return Response({'file_info': file_info})
|
||||||
|
|
||||||
def put(self, request, wiki_id):
|
def put(self, request, wiki_id):
|
||||||
try:
|
|
||||||
wiki = Wiki.objects.get(id=wiki_id)
|
wiki = Wiki.objects.get(wiki_id=wiki_id)
|
||||||
except Wiki.DoesNotExist:
|
if not wiki:
|
||||||
error_msg = "Wiki not found."
|
error_msg = "Wiki not found."
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
|
repo_owner = get_repo_owner(request, wiki_id)
|
||||||
|
wiki.owner = repo_owner
|
||||||
|
|
||||||
username = request.user.username
|
username = request.user.username
|
||||||
if not check_wiki_permission(wiki, username):
|
if not check_wiki_permission(wiki, username):
|
||||||
error_msg = 'Permission denied.'
|
error_msg = 'Permission denied.'
|
||||||
@ -543,12 +558,15 @@ class Wiki2PageView(APIView):
|
|||||||
|
|
||||||
def get(self, request, wiki_id, page_id):
|
def get(self, request, wiki_id, page_id):
|
||||||
|
|
||||||
try:
|
|
||||||
wiki = Wiki.objects.get(id=wiki_id)
|
wiki = Wiki.objects.get(wiki_id=wiki_id)
|
||||||
except Wiki.DoesNotExist:
|
if not wiki:
|
||||||
error_msg = "Wiki not found."
|
error_msg = "Wiki not found."
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
|
repo_owner = get_repo_owner(request, wiki_id)
|
||||||
|
wiki.owner = repo_owner
|
||||||
|
|
||||||
username = request.user.username
|
username = request.user.username
|
||||||
if not check_wiki_permission(wiki, username):
|
if not check_wiki_permission(wiki, username):
|
||||||
error_msg = 'Permission denied.'
|
error_msg = 'Permission denied.'
|
||||||
@ -610,12 +628,15 @@ class Wiki2PageView(APIView):
|
|||||||
})
|
})
|
||||||
|
|
||||||
def delete(self, request, wiki_id, page_id):
|
def delete(self, request, wiki_id, page_id):
|
||||||
try:
|
|
||||||
wiki = Wiki.objects.get(id=wiki_id)
|
wiki = Wiki.objects.get(wiki_id=wiki_id)
|
||||||
except Wiki.DoesNotExist:
|
if not wiki:
|
||||||
error_msg = "Wiki not found."
|
error_msg = "Wiki not found."
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
|
repo_owner = get_repo_owner(request, wiki_id)
|
||||||
|
wiki.owner = repo_owner
|
||||||
|
|
||||||
username = request.user.username
|
username = request.user.username
|
||||||
if not check_wiki_permission(wiki, username):
|
if not check_wiki_permission(wiki, username):
|
||||||
error_msg = 'Permission denied.'
|
error_msg = 'Permission denied.'
|
||||||
@ -720,12 +741,15 @@ class Wiki2DuplicatePageView(APIView):
|
|||||||
error_msg = 'page_id invalid.'
|
error_msg = 'page_id invalid.'
|
||||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||||
|
|
||||||
try:
|
|
||||||
wiki = Wiki.objects.get(id=wiki_id)
|
wiki = Wiki.objects.get(wiki_id=wiki_id)
|
||||||
except Wiki.DoesNotExist:
|
if not wiki:
|
||||||
error_msg = "Wiki not found."
|
error_msg = "Wiki not found."
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
|
repo_owner = get_repo_owner(request, wiki_id)
|
||||||
|
wiki.owner = repo_owner
|
||||||
|
|
||||||
username = request.user.username
|
username = request.user.username
|
||||||
if not check_wiki_permission(wiki, username):
|
if not check_wiki_permission(wiki, username):
|
||||||
error_msg = 'Permission denied.'
|
error_msg = 'Permission denied.'
|
||||||
|
@ -526,11 +526,11 @@ urlpatterns = [
|
|||||||
|
|
||||||
## user::wiki2
|
## user::wiki2
|
||||||
re_path(r'^api/v2.1/wikis2/$', Wikis2View.as_view(), name='api-v2.1-wikis2'),
|
re_path(r'^api/v2.1/wikis2/$', Wikis2View.as_view(), name='api-v2.1-wikis2'),
|
||||||
re_path(r'^api/v2.1/wiki2/(?P<wiki_id>\d+)/$', Wiki2View.as_view(), name='api-v2.1-wiki2'),
|
re_path(r'^api/v2.1/wiki2/(?P<wiki_id>[-0-9a-f]{36})/$', Wiki2View.as_view(), name='api-v2.1-wiki2'),
|
||||||
re_path(r'^api/v2.1/wiki2/(?P<wiki_id>\d+)/config/$', Wiki2ConfigView.as_view(), name='api-v2.1-wiki2-config'),
|
re_path(r'^api/v2.1/wiki2/(?P<wiki_id>[-0-9a-f]{36})/config/$', Wiki2ConfigView.as_view(), name='api-v2.1-wiki2-config'),
|
||||||
re_path(r'^api/v2.1/wiki2/(?P<wiki_id>\d+)/pages/$', Wiki2PagesView.as_view(), name='api-v2.1-wiki2-pages'),
|
re_path(r'^api/v2.1/wiki2/(?P<wiki_id>[-0-9a-f]{36})/pages/$', Wiki2PagesView.as_view(), name='api-v2.1-wiki2-pages'),
|
||||||
re_path(r'^api/v2.1/wiki2/(?P<wiki_id>\d+)/page/(?P<page_id>[-0-9a-zA-Z]{4})/$', Wiki2PageView.as_view(), name='api-v2.1-wiki2-page'),
|
re_path(r'^api/v2.1/wiki2/(?P<wiki_id>[-0-9a-f]{36})/page/(?P<page_id>[-0-9a-zA-Z]{4})/$', Wiki2PageView.as_view(), name='api-v2.1-wiki2-page'),
|
||||||
re_path(r'^api/v2.1/wiki2/(?P<wiki_id>\d+)/duplicate-page/$', Wiki2DuplicatePageView.as_view(), name='api-v2.1-wiki2-duplicate-page'),
|
re_path(r'^api/v2.1/wiki2/(?P<wiki_id>[-0-9a-f]{36})/duplicate-page/$', Wiki2DuplicatePageView.as_view(), name='api-v2.1-wiki2-duplicate-page'),
|
||||||
|
|
||||||
## user::drafts
|
## user::drafts
|
||||||
re_path(r'^api/v2.1/drafts/$', DraftsView.as_view(), name='api-v2.1-drafts'),
|
re_path(r'^api/v2.1/drafts/$', DraftsView.as_view(), name='api-v2.1-drafts'),
|
||||||
|
@ -11,47 +11,36 @@ class WikiDoesNotExist(Exception):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class WikiManager(models.Manager):
|
class WikiManager():
|
||||||
def add(self, wiki_name, owner, repo_id):
|
def get(self, wiki_id):
|
||||||
now = timezone.now()
|
repo = seafile_api.get_repo(wiki_id)
|
||||||
wiki = self.model(owner=owner, name=wiki_name, repo_id=repo_id, created_at=now)
|
if not repo:
|
||||||
wiki.save(using=self._db)
|
return None
|
||||||
return wiki
|
return Wiki2(repo)
|
||||||
|
|
||||||
|
|
||||||
class Wiki2(models.Model):
|
class Wiki2(object):
|
||||||
"""New wiki model to enable a user has multiple wikis and replace
|
"""New wiki model to enable a user has multiple wikis and replace
|
||||||
personal wiki.
|
personal wiki.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
owner = LowerCaseCharField(max_length=255)
|
|
||||||
name = models.CharField(max_length=255)
|
|
||||||
repo_id = models.CharField(max_length=36, db_index=True)
|
|
||||||
created_at = models.DateTimeField(default=timezone.now, db_index=True)
|
|
||||||
objects = WikiManager()
|
objects = WikiManager()
|
||||||
|
|
||||||
class Meta:
|
def __init__(self, wiki, owner=None):
|
||||||
db_table = 'wiki_wiki2'
|
# wiki a wiki type repo object
|
||||||
unique_together = (('owner', 'repo_id'),)
|
self.pk = wiki.id
|
||||||
ordering = ["name"]
|
self.id = wiki.id
|
||||||
|
self.owner = owner or wiki.owner
|
||||||
|
self.name = wiki.repo_name
|
||||||
|
self.updated_at = timestamp_to_isoformat_timestr(wiki.last_modify)
|
||||||
|
self.repo_id = wiki.repo_id
|
||||||
|
|
||||||
@property
|
|
||||||
def updated_at(self):
|
|
||||||
assert len(self.repo_id) == 36
|
|
||||||
|
|
||||||
repo = seafile_api.get_repo(self.repo_id)
|
|
||||||
if not repo:
|
|
||||||
return ''
|
|
||||||
|
|
||||||
return repo.last_modify
|
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
return {
|
return {
|
||||||
'id': self.pk,
|
'id': self.pk,
|
||||||
'owner': self.owner,
|
'owner': self.owner,
|
||||||
'name': self.name,
|
'name': self.name,
|
||||||
'created_at': datetime_to_isoformat_timestr(self.created_at),
|
'updated_at': self.updated_at,
|
||||||
'updated_at': timestamp_to_isoformat_timestr(self.updated_at),
|
|
||||||
'repo_id': self.repo_id,
|
'repo_id': self.repo_id,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,5 +52,4 @@ from seahub.signals import repo_deleted
|
|||||||
@receiver(repo_deleted)
|
@receiver(repo_deleted)
|
||||||
def remove_wiki(sender, **kwargs):
|
def remove_wiki(sender, **kwargs):
|
||||||
repo_id = kwargs['repo_id']
|
repo_id = kwargs['repo_id']
|
||||||
|
return
|
||||||
Wiki2.objects.filter(repo_id=repo_id).delete()
|
|
||||||
|
@ -67,12 +67,12 @@ def get_wiki_config(repo_id, username):
|
|||||||
|
|
||||||
|
|
||||||
def is_group_wiki(wiki):
|
def is_group_wiki(wiki):
|
||||||
return not ('@' in wiki.owner)
|
return '@seafile_group' in wiki.owner
|
||||||
|
|
||||||
|
|
||||||
def check_wiki_admin_permission(wiki, username):
|
def check_wiki_admin_permission(wiki, username):
|
||||||
if is_group_wiki(wiki):
|
if is_group_wiki(wiki):
|
||||||
group_id = wiki.owner
|
group_id = int(wiki.owner.split('@')[0])
|
||||||
return is_group_admin(group_id, username)
|
return is_group_admin(group_id, username)
|
||||||
else:
|
else:
|
||||||
if username == wiki.owner:
|
if username == wiki.owner:
|
||||||
@ -82,7 +82,7 @@ def check_wiki_admin_permission(wiki, username):
|
|||||||
|
|
||||||
def check_wiki_permission(wiki, username):
|
def check_wiki_permission(wiki, username):
|
||||||
if is_group_wiki(wiki):
|
if is_group_wiki(wiki):
|
||||||
group_id = wiki.owner
|
group_id = int(wiki.owner.split('@')[0])
|
||||||
return is_group_member(group_id, username)
|
return is_group_member(group_id, username)
|
||||||
else:
|
else:
|
||||||
if username == wiki.owner:
|
if username == wiki.owner:
|
||||||
|
@ -8,7 +8,7 @@ from datetime import datetime
|
|||||||
from seaserv import seafile_api
|
from seaserv import seafile_api
|
||||||
|
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect, Http404
|
||||||
from django.shortcuts import render, get_object_or_404, redirect
|
from django.shortcuts import render, get_object_or_404, redirect
|
||||||
|
|
||||||
from seahub.share.models import FileShare
|
from seahub.share.models import FileShare
|
||||||
@ -21,7 +21,7 @@ from seahub.auth.decorators import login_required
|
|||||||
from seahub.wiki2.utils import can_edit_wiki, check_wiki_permission, get_wiki_config
|
from seahub.wiki2.utils import can_edit_wiki, check_wiki_permission, get_wiki_config
|
||||||
|
|
||||||
from seahub.utils.file_op import check_file_lock, ONLINE_OFFICE_LOCK_OWNER, if_locked_by_online_office
|
from seahub.utils.file_op import check_file_lock, ONLINE_OFFICE_LOCK_OWNER, if_locked_by_online_office
|
||||||
from seahub.utils.repo import parse_repo_perm
|
from seahub.utils.repo import parse_repo_perm, get_repo_owner
|
||||||
from seahub.settings import SEADOC_SERVER_URL
|
from seahub.settings import SEADOC_SERVER_URL
|
||||||
|
|
||||||
# Get an instance of a logger
|
# Get an instance of a logger
|
||||||
@ -33,7 +33,13 @@ def wiki_view(request, wiki_id):
|
|||||||
""" edit wiki page. for wiki2
|
""" edit wiki page. for wiki2
|
||||||
"""
|
"""
|
||||||
# get wiki object or 404
|
# get wiki object or 404
|
||||||
wiki = get_object_or_404(Wiki, id=wiki_id)
|
wiki = Wiki.objects.get(wiki_id=wiki_id)
|
||||||
|
if not wiki:
|
||||||
|
raise Http404
|
||||||
|
|
||||||
|
|
||||||
|
repo_owner = get_repo_owner(request, wiki_id)
|
||||||
|
wiki.owner = repo_owner
|
||||||
|
|
||||||
page_id = request.GET.get('page_id')
|
page_id = request.GET.get('page_id')
|
||||||
file_path = ''
|
file_path = ''
|
||||||
|
Loading…
Reference in New Issue
Block a user