From c198fac29194709cad976978b52a844f86aea613 Mon Sep 17 00:00:00 2001 From: xiez Date: Fri, 13 Jul 2012 11:22:20 +0800 Subject: [PATCH] Add file shared links in shareadmin page. --- share/models.py | 1 + share/templates/repo/share_admin.html | 40 ++++++++++++++++++++++++--- share/views.py | 15 ++++++++-- views.py | 16 ++++++++--- 4 files changed, 61 insertions(+), 11 deletions(-) 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 %} + + + + + + + + {% for fs in fileshares %} + + + + + + + {% endfor %} + + +{% 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 = '删除成功'