diff --git a/seahub/templates/sysadmin/userinfo.html b/seahub/templates/sysadmin/userinfo.html
index d104c8cd92..492555386b 100644
--- a/seahub/templates/sysadmin/userinfo.html
+++ b/seahub/templates/sysadmin/userinfo.html
@@ -1,5 +1,5 @@
{% extends "admin_base.html" %}
-{% load i18n avatar_tags %}
+{% load i18n avatar_tags seahub_tags %}
{% load url from future %}
{% block extra_style %}
@@ -63,8 +63,9 @@
@@ -117,6 +118,55 @@
{% trans "None" %}
{% endif %}
+
+
+ {% if user_shared_links%}
+
+
+ |
+ {% trans "Name"%} |
+ {% trans "Size"%} |
+ {% trans "Type"%} |
+ {% trans "Visits"%} |
+ {% trans "Operations"%} |
+
+ {% for link in user_shared_links %}
+
+ {% if link.s_type%}
+ {% if link.s_type == 'f' %}
+  |
+ {{ link.filename }} |
+ {{ link.file_size|filesizeformat}} |
+ {% else %}
+  |
+ {{ link.filename }} |
+ {{ link.dir_size|filesizeformat}} |
+ {% endif %}
+ DownLoad |
+ {{ link.view_cnt }} |
+
+ {% trans "Remove"%}
+ |
+ {% else %}
+  |
+ {{ link.dir_name }} |
+ // |
+ Upload |
+ {{ link.view_cnt }} |
+
+ {% trans "Remove"%}
+ |
+ {% endif %}
+
+ {% endfor %}
+
+ {% else %}
+
+
{% trans "You don't have any shared link"%}
+
{% trans "You can generate an share link from any dir/file. People receive this link can download/upload zipped dir or files." %}
+
+ {% endif %}
+
{% include 'snippets/repo_del_popup.html' %}
diff --git a/seahub/views/sysadmin.py b/seahub/views/sysadmin.py
index 53b7741ad2..5b65668dae 100644
--- a/seahub/views/sysadmin.py
+++ b/seahub/views/sysadmin.py
@@ -28,13 +28,14 @@ from seahub.utils import IS_EMAIL_CONFIGURED, string2list, is_valid_username
from seahub.views import get_system_default_repo_id
from seahub.forms import SetUserQuotaForm, AddUserForm, BatchAddUserForm
from seahub.profile.models import Profile, DetailedProfile
-from seahub.share.models import FileShare
+from seahub.share.models import FileShare, UploadLinkShare
import seahub.settings as settings
from seahub.settings import INIT_PASSWD, SITE_NAME, \
SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER, SEND_EMAIL_ON_RESETTING_USER_PASSWD, \
ENABLE_GUEST
-from seahub.utils import send_html_email, get_user_traffic_list, get_server_id
+from seahub.utils import send_html_email, get_user_traffic_list, get_server_id, \
+ gen_file_share_link, gen_dir_share_link, gen_shared_upload_link
from seahub.utils.sysinfo import get_platform_name
logger = logging.getLogger(__name__)
@@ -361,6 +362,63 @@ def user_info(request, email):
profile = Profile.objects.get_profile_by_user(email)
d_profile = DetailedProfile.objects.get_detailed_profile_by_user(email)
+ user_shared_links = []
+ # download links
+ fileshares = FileShare.objects.filter(username=email)
+
+ for fs in fileshares:
+ r = seafile_api.get_repo(fs.repo_id)
+ if not r:
+ fs.delete()
+ continue
+
+ if fs.s_type == 'f':
+ if seafile_api.get_file_id_by_path(r.id, fs.path) is None:
+ fs.delete()
+ continue
+ fs.filename = os.path.basename(fs.path)
+ fs.shared_link = gen_file_share_link(fs.token)
+
+ path = fs.path.rstrip('/') # Normalize file path
+ obj_id = seafile_api.get_file_id_by_path(r.id, path)
+ file_size = seafile_api.get_file_size(r.store_id, r.version, obj_id)
+ fs.file_size = file_size
+ else:
+ if seafile_api.get_dir_id_by_path(r.id, fs.path) is None:
+ fs.delete()
+ continue
+ fs.filename = os.path.basename(fs.path.rstrip('/'))
+ fs.shared_link = gen_dir_share_link(fs.token)
+
+ path = fs.path
+ if path[-1] != '/': # Normalize dir path
+ path += '/'
+ #get dir size
+ dir_id = seafserv_threaded_rpc.get_dirid_by_path (r.id,
+ r.head_cmmt_id,
+ path.encode('utf-8'))
+ dir_size = seafserv_threaded_rpc.get_dir_size(r.store_id, r.version,
+ dir_id)
+ fs.dir_size = dir_size
+
+ fs.repo = r
+ user_shared_links.append(fs)
+
+ # upload links
+ uploadlinks = UploadLinkShare.objects.filter(username=email)
+ for link in uploadlinks:
+ r = seafile_api.get_repo(link.repo_id)
+ if not r:
+ link.delete()
+ continue
+ if seafile_api.get_dir_id_by_path(r.id, link.path) is None:
+ link.delete()
+ continue
+ link.dir_name = os.path.basename(link.path.rstrip('/'))
+ link.shared_link = gen_shared_upload_link(link.token)
+ link.repo = r
+ user_shared_links.append(link)
+
return render_to_response(
'sysadmin/userinfo.html', {
'owned_repos': owned_repos,
@@ -374,6 +432,7 @@ def user_info(request, email):
'profile': profile,
'd_profile': d_profile,
'org_name': org_name,
+ "user_shared_links": user_shared_links,
}, context_instance=RequestContext(request))
@login_required_ajax