diff --git a/seahub/templates/admin_base.html b/seahub/templates/admin_base.html
index 9df18b1e07..54c88842c9 100644
--- a/seahub/templates/admin_base.html
+++ b/seahub/templates/admin_base.html
@@ -16,6 +16,10 @@
{% trans "Notifications" %}
+
+ {% trans "Links" %}
+
+
{% endif %}
{% endblock %}
diff --git a/seahub/templates/sysadmin/sys_publink_admin.html b/seahub/templates/sysadmin/sys_publink_admin.html
new file mode 100644
index 0000000000..8692640ae4
--- /dev/null
+++ b/seahub/templates/sysadmin/sys_publink_admin.html
@@ -0,0 +1,65 @@
+{% extends "admin_base.html" %}
+{% load i18n seahub_tags %}
+{% block nav_seafadmin_class %}class="cur"{% endblock %}
+
+{% block main_panel %}
+{% trans "All Public Links" %}
+{% if publinks %}
+
+
+ {% trans "Name" %} |
+ {% trans "Owner" %} |
+ {% trans "Create At" %} |
+ {% trans "Count" %} |
+ {% trans "Operations" %} |
+
+ {% for publink in publinks %}
+
+ {{ publink.name }} |
+ {{ publink.username }} |
+ {{ publink.ctime|translate_seahub_time }} |
+ {{ publink.view_cnt }} |
+ {% trans "Remove" %}
+ |
+
+ {% endfor %}
+
+
+
+ {% if current_page != 1 %}
+
{% trans "Previous" %}
+ {% endif %}
+ {% if page_next %}
+
{% trans "Next" %}
+ {% endif %}
+ {% if current_page != 1 or page_next %}
+ |
+ {% endif %}
+
{% trans "Per page: " %}
+ {% if per_page == 25 %}
+
25
+ {% else %}
+
25
+ {% endif %}
+ {% if per_page == 50 %}
+
50
+ {% else %}
+
50
+ {% endif %}
+ {% if per_page == 100 %}
+
100
+ {% else %}
+
100
+ {% endif %}
+
+{% else %}
+{% trans "Empty" %}
+{% endif %}
+{% endblock %}
+
+{% block extra_script %}
+
+{% endblock %}
+
diff --git a/seahub/urls.py b/seahub/urls.py
index 0b887864f9..ff01aab149 100644
--- a/seahub/urls.py
+++ b/seahub/urls.py
@@ -15,7 +15,7 @@ from seahub.views.wiki import personal_wiki, personal_wiki_pages, \
personal_wiki_page_delete
from seahub.views.sysadmin import sys_repo_admin, sys_user_admin, sys_group_admin, \
user_info, user_add, user_remove, user_make_admin, \
- user_remove_admin, user_reset, user_activate
+ user_remove_admin, user_reset, user_activate, sys_publink_admin
# Uncomment the next two lines to enable the admin:
#from django.contrib import admin
@@ -115,6 +115,7 @@ urlpatterns = patterns('',
(r'^sys/seafadmin/$', sys_repo_admin),
url(r'^sys/useradmin/$', sys_user_admin, name='sys_useradmin'),
url(r'^sys/groupadmin/$', sys_group_admin, name='sys_group_admin'),
+ url(r'^sys/publinkadmin/$', sys_publink_admin, name='sys_publink_admin'),
url(r'^sys/notificationadmin/', notification_list, name='notification_list'),
url(r'^useradmin/add/$', user_add, name="user_add"),
(r'^useradmin/remove/(?P[^/]+)/$', user_remove),
diff --git a/seahub/views/sysadmin.py b/seahub/views/sysadmin.py
index 0b3722d5dc..dc4c0d4b88 100644
--- a/seahub/views/sysadmin.py
+++ b/seahub/views/sysadmin.py
@@ -1,5 +1,6 @@
# encoding: utf-8
+import os
from types import FunctionType
import logging
import simplejson as json
@@ -30,6 +31,7 @@ from seahub.auth.decorators import login_required
from seahub.utils import IS_EMAIL_CONFIGURED
from seahub.forms import SetUserQuotaForm, AddUserForm
from seahub.profile.models import Profile
+from seahub.share.models import FileShare, AnonymousShare
import seahub.settings as settings
from seahub.settings import INIT_PASSWD, \
@@ -381,3 +383,33 @@ def sys_group_admin(request):
'page_next': page_next,
}, context_instance=RequestContext(request))
+
+@login_required
+@sys_staff_required
+def sys_publink_admin(request):
+ # Make sure page request is an int. If not, deliver first page.
+ try:
+ current_page = int(request.GET.get('page', '1'))
+ per_page = int(request.GET.get('per_page', '100'))
+ except ValueError:
+ current_page = 1
+ per_page = 100
+
+ publinks = FileShare.objects.all()[per_page * (current_page -1):
+ per_page + 1]
+ for l in publinks:
+ if l.s_type == 'f':
+ l.name = os.path.basename(l.path)
+ else:
+ l.name = os.path.dirname(l.path)
+
+ return render_to_response(
+ 'sysadmin/sys_publink_admin.html', {
+ 'publinks': publinks,
+ 'current_page': current_page,
+ 'prev_page': current_page-1,
+ 'next_page': current_page+1,
+ 'per_page': per_page,
+ 'page_next': True,
+ },
+ context_instance=RequestContext(request))