diff --git a/media/css/seahub.css b/media/css/seahub.css index 76bea893a6..67b54eb83e 100644 --- a/media/css/seahub.css +++ b/media/css/seahub.css @@ -2350,6 +2350,7 @@ button.sf-dropdown-toggle:focus { #folder-perm-popup .op-target { max-width:540px; } +#confirm-popup .op-target, #repo-transfer-form .op-target { max-width:200px; } @@ -2358,7 +2359,7 @@ button.sf-dropdown-toggle:focus { margin-top:30px; } .user-list .user { - display:inline-block; /*to handle different height of items*/ + display:inline-block; /* to handle different height of items */ vertical-align:top; width:330px; margin:0 17px 30px 0; diff --git a/seahub/api2/endpoints/admin/libraries.py b/seahub/api2/endpoints/admin/libraries.py index 32dcd1a5e0..80598b8d0a 100644 --- a/seahub/api2/endpoints/admin/libraries.py +++ b/seahub/api2/endpoints/admin/libraries.py @@ -20,6 +20,7 @@ from seahub.api2.utils import api_error logger = logging.getLogger(__name__) def get_repo_info(repo): + result = {} result['id'] = repo.repo_id result['name'] = repo.repo_name @@ -33,14 +34,57 @@ def get_repo_info(repo): class AdminLibraries(APIView): - """ return all libraries - """ - authentication_classes = (TokenAuthentication, SessionAuthentication) throttle_classes = (UserRateThrottle,) permission_classes = (IsAdminUser,) def get(self, request, format=None): + """ + List 'all' libraries (by name/owner/page) + """ + + ## search libraries (by name/owner) + repo_name = request.GET.get('name', '') + owner = request.GET.get('owner', '') + repos = [] + if repo_name and owner : + # search by name and owner + owned_repos = seafile_api.get_owned_repo_list(owner) + for repo in owned_repos: + if not repo.name: + continue + if repo_name in repo.name: + repo_info = get_repo_info(repo) + repos.append(repo_info) + + return Response({ + "name": repo_name, "owner": owner, "repos": repos}) + + elif repo_name: + # search by name(keyword in name) + repos_all = seafile_api.get_repo_list(-1, -1) + for repo in repos_all: + if not repo.name: + continue + if repo_name in repo.name: + repo_info = get_repo_info(repo) + repos.append(repo_info) + + return Response({ + "name": repo_name, "owner": '', "repos": repos}) + + elif owner: + # search by owner + owned_repos = seafile_api.get_owned_repo_list(owner) + for repo in owned_repos: + repo_info = get_repo_info(repo) + repos.append(repo_info) + + return Response({ + "name": '', "owner": owner, "repos": repos}) + + + ## get libraries by page try: current_page = int(request.GET.get('page', '1')) per_page = int(request.GET.get('per_page', '100')) @@ -73,7 +117,7 @@ class AdminLibraries(APIView): 'has_next_page': has_next_page, 'current_page': current_page } - return Response((page_info, return_results)) + return Response({"page_info": page_info, "repos": return_results}) class AdminLibrary(APIView): diff --git a/seahub/api2/endpoints/admin/trash_libraries.py b/seahub/api2/endpoints/admin/trash_libraries.py index 69731295d8..2988fb5128 100644 --- a/seahub/api2/endpoints/admin/trash_libraries.py +++ b/seahub/api2/endpoints/admin/trash_libraries.py @@ -9,6 +9,7 @@ from rest_framework import status from seaserv import seafile_api from pysearpc import SearpcError +from seahub.utils import is_valid_username from seahub.utils.timeutils import timestamp_to_isoformat_timestr from seahub.api2.authentication import TokenAuthentication @@ -25,28 +26,40 @@ class AdminTrashLibraries(APIView): permission_classes = (IsAdminUser,) def get(self, request, format=None): - """ get all deleted libraries """ + List deleted repos (by owner) + """ + search_owner = request.GET.get('owner', '') + if search_owner and is_valid_username(search_owner): + repos = seafile_api.get_trash_repos_by_owner(search_owner) + print 'by owner' + else: + repos = seafile_api.get_trash_repo_list(-1, -1) + search_owner = '' + print 'all' - repos_all = seafile_api.get_trash_repo_list(-1, -1) - return_results = [] - for repo in repos_all: + return_repos = [] + for repo in repos: result = {} result['name'] = repo.repo_name result['id'] = repo.repo_id result['owner'] = repo.owner_id result['delete_time'] = timestamp_to_isoformat_timestr(repo.del_time) - return_results.append(result) + return_repos.append(result) - return Response(return_results) + return Response({"search_owner": search_owner, "repos": return_repos}) def delete(self, request, format=None): - """ clean all deleted libraries + """ clean all deleted libraries(by owner) """ + search_owner = request.data.get('owner', '') try: - seafile_api.empty_repo_trash() + if search_owner and is_valid_username(search_owner): + seafile_api.empty_repo_trash_by_owner(search_owner) + else: + seafile_api.empty_repo_trash() except SearpcError as e: logger.error(e) error_msg = 'Internal Server Error' diff --git a/seahub/templates/js/sysadmin-templates.html b/seahub/templates/js/sysadmin-templates.html index 7ece74fde1..0592d88e29 100644 --- a/seahub/templates/js/sysadmin-templates.html +++ b/seahub/templates/js/sysadmin-templates.html @@ -15,7 +15,7 @@ {% endif %}
- | {% trans "Name" %} | -{% trans "Files / Size" %} | -ID | -{% trans "Owner" %} | -{% trans "Operations" %} | -|||
---|---|---|---|---|---|---|---|---|
![]() |
- {{ repo.props.name }} | - {% else %} -![]() |
- {% if enable_sys_admin_view_repo and is_pro_version %}
- {{ repo.props.name }} | - {% else %} -{{ repo.props.name }} | - {% endif %} - {% endif %} -{{ repo.file_count }} / {{ repo.size|filesizeformat }} | -{{ repo.id }} | -- {% if repo.owner %} - {{ repo.owner}} - {% else %} - -- - {% endif %} - | -- - | -
{% trans "Name" %} | -ID | -{% trans "Description" %} | -
---|---|---|
{{ repo.props.name }} | -{{ repo.id }} | -{{ repo.props.desc }} | -
{% trans "None" %}
-{% endif %} - -{% endblock %} diff --git a/seahub/templates/sysadmin/sys_repo_admin.html b/seahub/templates/sysadmin/sys_repo_admin.html deleted file mode 100644 index 6c8541596b..0000000000 --- a/seahub/templates/sysadmin/sys_repo_admin.html +++ /dev/null @@ -1,41 +0,0 @@ -{% extends "sysadmin/base.html" %} -{% load i18n staticfiles %} -{% block cur_repo %}tab-cur{% endblock %} - -{% block extra_style %} - - -{% endblock %} - -{% block left_panel %}{{block.super}} - -{% endblock %} - -{% block right_panel %} -{% trans "None" %}
-{% endif %} - -{% include "sysadmin/repo_transfer_form.html" %} -{% endblock %} - -{% block extra_script %} - - -{% endblock %} diff --git a/seahub/templates/sysadmin/sys_repo_search.html b/seahub/templates/sysadmin/sys_repo_search.html deleted file mode 100644 index 745f4e63e0..0000000000 --- a/seahub/templates/sysadmin/sys_repo_search.html +++ /dev/null @@ -1,45 +0,0 @@ -{% extends "sysadmin/base.html" %} -{% load seahub_tags i18n staticfiles %} - -{% block cur_repo %}tab-cur{% endblock %} - -{% block extra_style %} - - -{% endblock %} - -{% block right_panel %} -{% trans "No result" %}
-{% endif %} - -{% include "sysadmin/repo_transfer_form.html" %} -{% endblock %} - -{% block extra_script %} - - -{% endblock %} diff --git a/seahub/templates/sysadmin/sys_repo_trash.html b/seahub/templates/sysadmin/sys_repo_trash.html deleted file mode 100644 index e274ccffd2..0000000000 --- a/seahub/templates/sysadmin/sys_repo_trash.html +++ /dev/null @@ -1,84 +0,0 @@ -{% extends "sysadmin/base.html" %} -{% load i18n seahub_tags %} -{% block cur_repo %}tab-cur{% endblock %} - -{% block left_panel %}{{block.super}} - -{% endblock %} - -{% block right_panel %} -{% trans "Tip: libraries deleted 30 days ago will be cleaned automatically."%}
-- | {% trans "Name" %} | -{% trans "Owner" %} | -{% trans "Deleted Time" %} | -{% trans "Operations" %} | -
---|---|---|---|---|
![]() |
- {{ repo.repo_name }} | -{{ repo.owner_id }} | -{{ repo.del_time|translate_seahub_time }} | -- {% trans "Delete" %} - {% trans "Restore" %} - | -