mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-05 08:53:14 +00:00
isSdocRevision
This commit is contained in:
@@ -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'
|
||||
|
@@ -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()
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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 %}
|
||||
|
@@ -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)
|
||||
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user