1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-05 08:53:14 +00:00

isSdocRevision

This commit is contained in:
skywalker
2023-06-30 12:07:27 +08:00
committed by er-pai-r
parent 5abb686efb
commit d08412b326
6 changed files with 73 additions and 13 deletions

View File

@@ -834,6 +834,7 @@ class SeadocRevisions(APIView):
"""
username = request.user.username
# argument check
origin_file_uuid = request.GET.get('doc_uuid')
repo_id = request.GET.get('repo_id')
try:
page = int(request.GET.get('page', '1'))
@@ -844,7 +845,22 @@ class SeadocRevisions(APIView):
start = (page - 1) * per_page
limit = per_page + 1
if repo_id:
if origin_file_uuid:
origin_uuid_map = FileUUIDMap.objects.get_fileuuidmap_by_uuid(origin_file_uuid)
if not origin_uuid_map:
error_msg = 'seadoc uuid %s not found.' % origin_file_uuid
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
repo_id = origin_uuid_map.repo_id
username = request.user.username
path = posixpath.join(origin_uuid_map.parent_path, origin_uuid_map.filename)
# permission check
if not check_folder_permission(request, repo_id, path):
error_msg = 'Permission denied.'
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
revision_queryset = SeadocRevision.objects.list_by_origin_doc_uuid(origin_uuid_map.uuid, start, limit)
count = SeadocRevision.objects.filter(origin_doc_uuid=origin_uuid_map.uuid).count()
elif repo_id:
# resource check
repo = seafile_api.get_repo(repo_id)
if not repo:
@@ -915,6 +931,10 @@ class SeadocRevisions(APIView):
#
origin_file_uuid = get_seadoc_file_uuid(repo, path)
if SeadocRevision.objects.get_by_doc_uuid(origin_file_uuid):
error_msg = 'seadoc %s is already a revision.' % filename
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
origin_file_id = seafile_api.get_file_id_by_path(repo_id, path)
revision_file_uuid = str(uuid.uuid4())
revision_filename = revision_file_uuid + '.sdoc'

View File

@@ -54,10 +54,10 @@ class SeadocDraftManager(models.Manager):
return self.filter(doc_uuid__in=doc_uuid_list)
def list_by_username(self, username, start, limit):
return self.filter(username=username)[start:limit]
return self.filter(username=username).order_by('-id')[start:limit]
def list_by_repo_id(self, repo_id, start, limit):
return self.filter(repo_id=repo_id)[start:limit]
return self.filter(repo_id=repo_id).order_by('-id')[start:limit]
class SeadocDraft(models.Model):
@@ -87,14 +87,17 @@ class SeadocRevisionManager(models.Manager):
def list_by_doc_uuids(self, doc_uuid_list):
return self.filter(doc_uuid__in=doc_uuid_list)
def list_by_origin_doc_uuid(self, origin_doc_uuid):
return self.filter(origin_doc_uuid=origin_doc_uuid)
def list_by_origin_doc_uuid(self, origin_doc_uuid, start, limit):
return self.filter(
origin_doc_uuid=origin_doc_uuid, is_published=False).order_by('-id')[start:limit]
def list_by_username(self, username, start, limit):
return self.filter(username=username)[start:limit]
return self.filter(
username=username, is_published=False).order_by('-id')[start:limit]
def list_by_repo_id(self, repo_id, start, limit):
return self.filter(repo_id=repo_id)[start:limit]
return self.filter(
repo_id=repo_id, is_published=False).order_by('-id')[start:limit]
def publish(self, doc_uuid, publisher, publish_file_version):
return self.filter(doc_uuid=doc_uuid).update(
@@ -115,9 +118,9 @@ class SeadocRevision(models.Model):
origin_file_version = models.CharField(max_length=100)
publish_file_version = models.CharField(max_length=100, null=True)
publisher = models.CharField(max_length=255, null=True)
is_published = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True, db_index=True)
updated_at = models.DateTimeField(auto_now=True, db_index=True)
is_published = models.BooleanField(default=False, db_index=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = SeadocRevisionManager()

View File

@@ -15,6 +15,7 @@ from seahub.utils import normalize_file_path, gen_inner_file_get_url, gen_inner_
from seahub.views import check_folder_permission
from seahub.base.templatetags.seahub_tags import email2nickname
from seahub.avatar.templatetags.avatar_tags import api_avatar_url
from seahub.seadoc.models import SeadocRevision
logger = logging.getLogger(__name__)
@@ -172,3 +173,24 @@ def can_access_seadoc_asset(request, repo_id, path, file_uuid):
return True
return False
def is_seadoc_revision(doc_uuid):
info = {}
revision = SeadocRevision.objects.get_by_doc_uuid(doc_uuid)
if revision:
info = {'is_sdoc_revision': True}
revision_info = revision.to_dict()
info['origin_doc_uuid'] = revision_info['origin_doc_uuid']
info['origin_parent_path'] = revision_info['origin_parent_path']
info['origin_filename'] = revision_info['origin_filename']
info['origin_file_path'] = revision_info['origin_file_path']
info['origin_file_version'] = revision_info['origin_file_version']
info['publish_file_version'] = revision_info['publish_file_version']
info['publisher'] = revision_info['publisher']
info['publisher_nickname'] = revision_info['publisher_nickname']
info['is_published'] = revision_info['is_published']
info['revision_created_at'] = revision_info['created_at']
info['revision_updated_at'] = revision_info['updated_at']
else:
info = {'is_sdoc_revision': False}
return info

View File

@@ -14,6 +14,18 @@ docUuid: '{{ file_uuid }}',
assetsUrl: '{{ assets_url }}',
seadocAccessToken: '{{ seadoc_access_token }}',
seadocServerUrl: '{{ seadoc_server_url }}',
isSdocRevision: {% if is_sdoc_revision %}true{% else %}false{% endif %},
originDocUuid: '{{ origin_doc_uuid }}',
originParentPath: '{{ origin_parent_path }}',
originFilename: '{{ origin_filename }}',
originFilePath: '{{ origin_file_path }}',
originFileVersion: '{{ origin_file_version }}',
publishFileVersion: '{{ publish_file_version }}',
publisher: '{{ publisher }}',
publisherNickname: '{{ publisher_nickname }}',
isPublished: {% if is_published %}true{% else %}false{% endif %},
revisionCreatedAt: '{{ revision_created_at }}',
revisionUpdatedAt: '{{ revision_updated_at }}',
{% endblock %}
{% block render_bundle %}

View File

@@ -75,7 +75,7 @@ from seahub.thumbnail.utils import extract_xmind_image, get_thumbnail_src, \
XMIND_IMAGE_SIZE, get_share_link_thumbnail_src, get_thumbnail_image_path
from seahub.drafts.utils import get_file_draft, \
is_draft_file, has_draft_file
from seahub.seadoc.utils import get_seadoc_file_uuid, gen_seadoc_access_token
from seahub.seadoc.utils import get_seadoc_file_uuid, gen_seadoc_access_token, is_seadoc_revision
if HAS_OFFICE_CONVERTER:
from seahub.utils import (
@@ -666,6 +666,10 @@ def view_lib_file(request, repo_id, path):
return_dict['can_edit_file'] = can_edit_file
return_dict['seadoc_access_token'] = gen_seadoc_access_token(file_uuid, filename, username, permission=seadoc_perm)
# revision
revision_info = is_seadoc_revision(file_uuid)
return_dict.update(revision_info)
send_file_access_msg(request, repo, path, 'web')
return render(request, template, return_dict)

View File

@@ -1416,6 +1416,5 @@ CREATE TABLE `sdoc_revision` (
KEY `sdoc_revision_repo_id` (`repo_id`),
KEY `sdoc_revision_origin_doc_uuid` (`origin_doc_uuid`),
KEY `sdoc_revision_username` (`username`),
KEY `sdoc_revision_created_at` (`created_at`),
KEY `sdoc_revision_updated_at` (`updated_at`)
KEY `sdoc_revision_is_published` (`is_published`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;