diff --git a/seahub/api2/endpoints/file.py b/seahub/api2/endpoints/file.py index 0e1719472d..3b2656dcc1 100644 --- a/seahub/api2/endpoints/file.py +++ b/seahub/api2/endpoints/file.py @@ -31,7 +31,7 @@ from seahub.settings import MAX_UPLOAD_FILE_NAME_LEN, \ FILE_LOCK_EXPIRATION_DAYS, OFFICE_TEMPLATE_ROOT from seahub.drafts.models import Draft, DraftReview -from seahub.drafts.utils import is_draft_file +from seahub.drafts.utils import is_draft_file, get_file_review from seaserv import seafile_api from pysearpc import SearpcError @@ -291,7 +291,10 @@ class FileView(APIView): # rename draft file filetype, fileext = get_file_type_and_ext(new_file_name) if filetype == MARKDOWN or filetype == TEXT: - is_draft, review_id, draft_id, _ = is_draft_file(repo.id, path) + is_draft = is_draft_file(repo.id, path) + review = get_file_review(repo.id, path, is_draft) + review_id = review['review_id'] + draft_id = review['draft_id'] if is_draft: try: draft = Draft.objects.get(pk=draft_id) diff --git a/seahub/api2/views.py b/seahub/api2/views.py index 5bc4c8d5c8..84b90985f2 100644 --- a/seahub/api2/views.py +++ b/seahub/api2/views.py @@ -58,7 +58,7 @@ from seahub.notifications.models import UserNotification from seahub.options.models import UserOptions from seahub.profile.models import Profile, DetailedProfile from seahub.drafts.models import Draft -from seahub.drafts.utils import is_draft_file, has_draft_file +from seahub.drafts.utils import is_draft_file, has_draft_file, get_file_review from seahub.signals import (repo_created, repo_deleted) from seahub.share.models import FileShare, OrgFileShare, UploadLinkShare from seahub.utils import gen_file_get_url, gen_token, gen_file_upload_url, \ @@ -3038,18 +3038,17 @@ class FileDetailView(APIView): file_type, file_ext = get_file_type_and_ext(file_name) if file_type == MARKDOWN: - is_draft, review_id, draft_id, review_status = is_draft_file(repo_id, path) + is_draft = is_draft_file(repo_id, path) - has_draft = False - draft_file_path = '' - if not is_draft: - has_draft, draft_file_path, draft_id, review_id, review_status = has_draft_file(repo_id, path) + has_draft = has_draft_file(repo_id, path) + + review = get_file_review(repo_id, path, is_draft, has_draft) - entry['review_id'] = review_id - entry['review_status'] = review_status entry['is_draft'] = is_draft entry['has_draft'] = has_draft - entry['draft_file_path'] = draft_file_path + entry['review_id'] = review['review_id'] + entry['review_status'] = review['review_status'] + entry['draft_file_path'] = review['draft_file_path'] # fetch file contributors and latest contributor try: diff --git a/seahub/drafts/utils.py b/seahub/drafts/utils.py index 7089f390da..9ba0b90435 100644 --- a/seahub/drafts/utils.py +++ b/seahub/drafts/utils.py @@ -28,35 +28,21 @@ def get_draft_file_name(repo_id, file_path): def is_draft_file(repo_id, file_path): - is_draft = False - review_id = None - draft_id = None - review_status = None - file_path = normalize_file_path(file_path) from .models import Draft try: - draft = Draft.objects.get(origin_repo_id=repo_id, draft_file_path=file_path) + Draft.objects.get(origin_repo_id=repo_id, draft_file_path=file_path) is_draft = True - draft_id = draft.id - if hasattr(draft, 'draftreview'): - review_id = draft.draftreview.id - review_status = draft.draftreview.status except Draft.DoesNotExist: pass - return is_draft, review_id, draft_id, review_status + return is_draft def has_draft_file(repo_id, file_path): has_draft = False - draft_file_path = None - draft_id = None - review_id = None - review_status = None - file_path = normalize_file_path(file_path) parent_path = os.path.dirname(file_path) filename = os.path.basename(file_path) @@ -67,15 +53,51 @@ def has_draft_file(repo_id, file_path): from .models import Draft if file_uuid: try: - draft = Draft.objects.get(origin_file_uuid=file_uuid) - if hasattr(draft, 'draftreview'): - review_id = draft.draftreview.id - review_status = draft.draftreview.status - - draft_id = draft.id + Draft.objects.get(origin_file_uuid=file_uuid) has_draft = True - draft_file_path = draft.draft_file_path except Draft.DoesNotExist: pass - return has_draft, draft_file_path, draft_id, review_id, review_status + return has_draft + + +def get_file_review(repo_id, file_path, is_draft=False, has_draft=False): + review = {} + review['review_id'] = None + review['review_status'] = None + review['draft_id'] = None + review['draft_file_path'] = '' + + from .models import Draft, DraftReview + + if is_draft: + d = Draft.objects.get(origin_repo_id=repo_id, draft_file_path=file_path) + review['draft_id'] = d.id + + try: + d_r = DraftReview.objects.get(origin_repo_id=repo_id, draft_file_path=file_path) + review['review_id'] = d_r.id + review['review_status'] = d_r.status + review['draft_file_path'] = file_path + except DraftReview.DoesNotExist: + pass + + if has_draft: + file_path = normalize_file_path(file_path) + parent_path = os.path.dirname(file_path) + filename = os.path.basename(file_path) + + file_uuid = FileUUIDMap.objects.get_fileuuidmap_by_path( + repo_id, parent_path, filename, is_dir=False) + + if file_uuid: + try: + DraftReview.objects.get(origin_file_uuid=file_uuid) + review['review_id'] = d_r.id + review['review_status'] = d_r.status + review['draft_id'] = d_r.draft_id.id + review['draft_file_path'] = d_r.draft_file_path + except DraftReview.DoesNotExist: + pass + + return review diff --git a/seahub/views/file.py b/seahub/views/file.py index 9aa45ff4af..4035f6466c 100644 --- a/seahub/views/file.py +++ b/seahub/views/file.py @@ -72,7 +72,7 @@ from seahub.utils.repo import is_repo_owner, parse_repo_perm from seahub.group.utils import is_group_member from seahub.thumbnail.utils import extract_xmind_image, get_thumbnail_src, \ XMIND_IMAGE_SIZE, THUMBNAIL_ROOT -from seahub.drafts.utils import is_draft_file, has_draft_file +from seahub.drafts.utils import is_draft_file, has_draft_file, get_file_review from seahub.constants import HASH_URLS @@ -624,12 +624,11 @@ def view_lib_file(request, repo_id, path): mode = request.GET.get('mode', '') - is_draft, review_id, draft_id, review_status = is_draft_file(repo.id, path) + is_draft= is_draft_file(repo.id, path) - has_draft = False - draft_file_path = '' - if not is_draft: - has_draft, draft_file_path, draft_id, review_id, review_status = has_draft_file(repo.id, path) + has_draft = has_draft_file(repo.id, path) + + review = get_file_review(repo.id, path, is_draft, has_draft) if filetype == MARKDOWN: return_dict['protocol'] = request.is_secure() and 'https' or 'http' @@ -639,12 +638,12 @@ def view_lib_file(request, repo_id, path): return_dict['language_code'] = get_language() return_dict['seafile_collab_server'] = SEAFILE_COLLAB_SERVER return_dict['mode'] = 'edit' if mode else 'viewer' - return_dict['draft_id'] = draft_id - return_dict['review_id'] = review_id - return_dict['review_status'] = review_status return_dict['is_draft'] = is_draft return_dict['has_draft'] = has_draft - return_dict['draft_file_path'] = draft_file_path + return_dict['draft_id'] = review['draft_id'] + return_dict['review_id'] = review['review_id'] + return_dict['review_status'] = review['review_status'] + return_dict['draft_file_path'] = review['draft_file_path'] else: return_dict['file_content'] = file_content