diff --git a/share/models.py b/share/models.py
index c53ffb40bf..7a5fa2a3f1 100644
--- a/share/models.py
+++ b/share/models.py
@@ -19,3 +19,4 @@ class FileShare(models.Model):
path = models.TextField()
token = models.CharField(max_length=10, unique=True)
ctime = models.DateTimeField(default=datetime.datetime.now)
+ view_cnt = models.IntegerField(default=0)
diff --git a/share/templates/repo/share_admin.html b/share/templates/repo/share_admin.html
index 71df1d5858..945e1ee367 100644
--- a/share/templates/repo/share_admin.html
+++ b/share/templates/repo/share_admin.html
@@ -36,9 +36,9 @@
{% if out_links %}
- 名字 |
- 共享给 |
- 有效期 |
+ 目录名 |
+ 共享给 |
+ 有效期 |
操作 |
{% for link in out_links %}
@@ -58,8 +58,31 @@
{% else %}
暂无
-{% endif %}
+n{% endif %}
+我管理的文件外链
+{% if fileshares %}
+
+{% else %}
+暂无
+{% endif %}
@@ -90,5 +113,14 @@ $(".view-link").click(function() {
return false;
});
+$(".view-file-link").click(function() {
+
+ var t = $(this).attr('data');
+ var l = '{{ protocol }}://' + '{{ domain }}{{ SITE_ROOT }}f/' + t + '/';
+ $('.view-link-alert').text("该文件外链为:" + l);
+ $("#view-link").modal({appendTo: "#main", containerCss:{padding:18}});
+ return false;
+});
+
{% endblock %}
diff --git a/share/views.py b/share/views.py
index 9beabc5f7c..28ea0f5a25 100644
--- a/share/views.py
+++ b/share/views.py
@@ -14,6 +14,7 @@ from seaserv import seafserv_threaded_rpc, get_repo, ccnet_rpc, ccnet_threaded_r
from forms import RepoShareForm
from models import AnonymousShare
#from seahub.contacts.models import Contact
+from seahub.share.models import FileShare
from seahub.views import validate_owner, validate_emailuser
from seahub.utils import go_permission_error
from settings import ANONYMOUS_SHARE_COOKIE_TIMEOUT
@@ -100,7 +101,8 @@ def share_repo(request):
@login_required
def share_admin(request):
"""
- List repos I share to others or groups, and list my anonymous share links
+ List repos I share to others, include groups and emails. And also list
+ file shared links I generated.
"""
username = request.user.username
@@ -125,16 +127,23 @@ def share_admin(request):
out_repos.append(repo)
- # anonymous share links
+ # Repo anonymous share links
out_links = AnonymousShare.objects.filter(repo_owner=request.user.username)
for link in out_links:
repo = get_repo(link.repo_id)
link.repo_name = repo.name
link.remain_time = anon_share_token_generator.get_remain_time(link.token)
-
+
+ # File shared links
+ fileshares = FileShare.objects.filter(username=request.user.username)
+ for fs in fileshares:
+ fs.filename = fs.path[1:]
+ fs.repo = get_repo(fs.repo_id)
+
return render_to_response('repo/share_admin.html', {
"out_repos": out_repos,
"out_links": out_links,
+ "fileshares": fileshares,
"protocol": request.is_secure() and 'https' or 'http',
"domain": RequestSite(request).domain,
}, context_instance=RequestContext(request))
diff --git a/views.py b/views.py
index 6cc8379d88..3a0445608b 100644
--- a/views.py
+++ b/views.py
@@ -12,6 +12,7 @@ from django.core.mail import send_mail
from django.contrib import messages
from django.contrib.sites.models import Site, RequestSite
from django.db import IntegrityError
+from django.db.models import F
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import render_to_response, redirect
from django.template import Context, loader, RequestContext
@@ -1896,7 +1897,7 @@ def view_shared_file(request, token):
can_preview, filetype = valid_previewed_file(filename)
- # raw path
+ # Raw path
tmp_str = '%s/access?repo_id=%s&id=%s&filename=%s&op=%s&t=%s&u=%s'
raw_path = tmp_str % (http_server_root,
repo_id, obj_id,
@@ -1904,6 +1905,11 @@ def view_shared_file(request, token):
access_token,
username)
+ # Increase file shared link view_cnt, this operation should be atomic
+ fileshare = FileShare.objects.get(token=token)
+ fileshare.view_cnt = F('view_cnt') + 1
+ fileshare.save()
+
return render_to_response('view_shared_file.html', {
'repo': repo,
'obj_id': obj_id,
@@ -1920,14 +1926,16 @@ def view_shared_file(request, token):
@login_required
def remove_shared_link(request):
"""
- Handle ajax request to remove file shared link.
+ Handle request to remove file shared link.
"""
+ token = request.GET.get('t', '')
+
if not request.is_ajax():
- raise Http404
+ FileShare.objects.filter(token=token).delete()
+ return HttpResponseRedirect(reverse('share_admin'))
content_type = 'application/json; charset=utf-8'
- token = request.GET.get('t', '')
FileShare.objects.filter(token=token).delete()
msg = '删除成功'