From 3ec7684d46d2edfd1539da3f86fc8881e8aefc22 Mon Sep 17 00:00:00 2001
From: zming <517046497@qq.com>
Date: Mon, 11 Dec 2017 14:41:20 +0800
Subject: [PATCH] search link
---
media/css/seahub.css | 3 +
seahub/templates/sysadmin/link_search.html | 97 +++++++++++++++++++
.../templates/sysadmin/sys_publink_admin.html | 6 ++
seahub/urls.py | 1 +
seahub/views/sysadmin.py | 29 ++++++
.../seahub/views/sysadmin/test_link_search.py | 57 +++++++++++
6 files changed, 193 insertions(+)
create mode 100644 seahub/templates/sysadmin/link_search.html
create mode 100644 tests/seahub/views/sysadmin/test_link_search.py
diff --git a/media/css/seahub.css b/media/css/seahub.css
index af97e9df46..6533fe3b0f 100644
--- a/media/css/seahub.css
+++ b/media/css/seahub.css
@@ -3057,6 +3057,7 @@ button.sf-dropdown-toggle:focus {
}
}
#search-form,
+#search-link-form,
#search-user-form,
#search-group-form,
#search-repo-form {
@@ -3161,11 +3162,13 @@ button.sf-dropdown-toggle:focus {
}
#search-repo-form label,
#search-group-form label,
+#search-link-form label,
#search-user-form label {
width:3.5em;
}
#search-repo-form .submit,
#search-group-form .submit,
+#search-link-form .submit,
#search-user-form .submit {
margin-left:3.5em;
}
diff --git a/seahub/templates/sysadmin/link_search.html b/seahub/templates/sysadmin/link_search.html
new file mode 100644
index 0000000000..233417af52
--- /dev/null
+++ b/seahub/templates/sysadmin/link_search.html
@@ -0,0 +1,97 @@
+{% extends "sysadmin/base.html" %}
+{% load seahub_tags i18n %}
+
+{% block cur_links %}tab-cur{% endblock %}
+
+{% block right_panel %}
+
{% trans "Search Link"%}
+
+
+
+
{% trans "Result"%}
+
+
+
+
+
+{% if publinks %}
+
+{% else %}
+{% trans "No result" %}
+{% endif %}
+
+
+
+
+
{% trans "Activating..., please wait" %}
+
+
+{% endblock %}
+
+{% block extra_script %}
+
+{% endblock %}
diff --git a/seahub/templates/sysadmin/sys_publink_admin.html b/seahub/templates/sysadmin/sys_publink_admin.html
index 4f0dd15dee..743a038b7c 100644
--- a/seahub/templates/sysadmin/sys_publink_admin.html
+++ b/seahub/templates/sysadmin/sys_publink_admin.html
@@ -3,6 +3,12 @@
{% block cur_links %}tab-cur{% endblock %}
+{% block left_panel %}{{block.super}}
+
+{% endblock %}
+
{% block right_panel %}
diff --git a/seahub/urls.py b/seahub/urls.py
index 4140550dd4..ee9116e151 100644
--- a/seahub/urls.py
+++ b/seahub/urls.py
@@ -424,6 +424,7 @@ urlpatterns = patterns(
url(r'^sys/publink/remove/$', sys_publink_remove, name='sys_publink_remove'),
url(r'^sys/uploadlinkadmin/$', sys_upload_link_admin, name='sys_upload_link_admin'),
url(r'^sys/uploadlink/remove/$', sys_upload_link_remove, name='sys_upload_link_remove'),
+ url(r'^sys/link-search/$', link_search, name="link_search"),
url(r'^sys/notificationadmin/', notification_list, name='notification_list'),
url(r'^sys/invitationadmin/$', sys_invitation_admin, name='sys_invitation_admin'),
url(r'^sys/invitationadmin/remove/$', sys_invitation_remove, name='sys_invitation_remove'),
diff --git a/seahub/views/sysadmin.py b/seahub/views/sysadmin.py
index c4220345c0..5206119c6e 100644
--- a/seahub/views/sysadmin.py
+++ b/seahub/views/sysadmin.py
@@ -1615,6 +1615,35 @@ def sys_upload_link_remove(request):
result = {'success': True}
return HttpResponse(json.dumps(result), content_type=content_type)
+@login_required
+@sys_staff_required
+def link_search(request):
+ sort_by = request.GET.get('sort_by', 'time_up')
+ token = request.GET.get('token', '')
+
+ if sort_by == 'time_down':
+ publinks = FileShare.objects.filter(token__startswith=token).order_by('ctime')
+ elif sort_by == 'count_up':
+ publinks = FileShare.objects.filter(token__startswith=token).order_by('-view_cnt')
+ elif sort_by == 'count_down':
+ publinks = FileShare.objects.filter(token__startswith=token).order_by('view_cnt')
+ else:
+ publinks = FileShare.objects.filter(token__startswith=token).order_by('-ctime')
+
+ for l in publinks:
+ if l.is_file_share_link():
+ l.name = os.path.basename(l.path)
+ else:
+ l.name = os.path.dirname(l.path)
+
+ return render_to_response(
+ 'sysadmin/link_search.html', {
+ 'publinks': publinks,
+ 'sort_by': sort_by,
+ 'token': token
+ },
+ context_instance=RequestContext(request))
+
@login_required
@sys_staff_required
def user_search(request):
diff --git a/tests/seahub/views/sysadmin/test_link_search.py b/tests/seahub/views/sysadmin/test_link_search.py
new file mode 100644
index 0000000000..3d266f609a
--- /dev/null
+++ b/tests/seahub/views/sysadmin/test_link_search.py
@@ -0,0 +1,57 @@
+from django.core.urlresolvers import reverse
+
+from seahub.test_utils import BaseTestCase
+from seahub.share.models import FileShare
+
+
+class AdminSearchShareLinkText(BaseTestCase):
+
+ def setUp(self):
+ self.repo_id = self.repo.id
+ self.file_path= self.file
+ self.folder_path= self.folder
+ self.invalid_token = '00000000000000000000'
+
+ def tearDown(self):
+ self.remove_repo()
+
+ def _add_file_share_link(self, password=None):
+ fs = FileShare.objects.create_file_link(
+ self.user.username, self.repo.id, self.file, password, None)
+
+ return fs.token
+
+ def _add_dir_share_link(self, password=None):
+ fs = FileShare.objects.create_dir_link(
+ self.user.username, self.repo.id, self.folder, password, None)
+
+ return fs.token
+
+ def test_search_file_share_link_info_by_token(self):
+ self.login_as(self.admin)
+ token = self._add_file_share_link()
+
+ url = reverse('link_search') + '?token=' + token
+ resp = self.client.get(url)
+ self.assertEqual(200, resp.status_code)
+ self.assertEqual(token, resp.context['publinks'][0].token)
+
+ def test_search_file_share_link_info_by_part_of_token(self):
+ self.login_as(self.admin)
+ token = self._add_file_share_link()
+
+ url = reverse('link_search') + '?token=' + token[:3]
+ resp = self.client.get(url)
+ self.assertEqual(200, resp.status_code)
+ tokens = []
+ for t in resp.context['publinks']:
+ tokens.append(t.token)
+ assert token in tokens
+
+ def test_search_file_share_link_info_by_invalid_token(self):
+ self.login_as(self.admin)
+
+ url = reverse('link_search') + '?token=' + 'i am a invalid token'
+ resp = self.client.get(url)
+ self.assertEqual(200, resp.status_code)
+ self.assertEqual(0, len(resp.context['publinks']))