mirror of
https://github.com/haiwen/seahub.git
synced 2025-10-21 02:42:26 +00:00
Add file shared links in shareadmin page.
This commit is contained in:
@@ -19,3 +19,4 @@ class FileShare(models.Model):
|
|||||||
path = models.TextField()
|
path = models.TextField()
|
||||||
token = models.CharField(max_length=10, unique=True)
|
token = models.CharField(max_length=10, unique=True)
|
||||||
ctime = models.DateTimeField(default=datetime.datetime.now)
|
ctime = models.DateTimeField(default=datetime.datetime.now)
|
||||||
|
view_cnt = models.IntegerField(default=0)
|
||||||
|
@@ -36,9 +36,9 @@
|
|||||||
{% if out_links %}
|
{% if out_links %}
|
||||||
<table class="link-list">
|
<table class="link-list">
|
||||||
<tr>
|
<tr>
|
||||||
<th width="20%">名字</th>
|
<th width="25%">目录名</th>
|
||||||
<th width="30%">共享给</th>
|
<th width="35%">共享给</th>
|
||||||
<th width="30%">有效期</th>
|
<th width="20%">有效期</th>
|
||||||
<th width="20%">操作</th>
|
<th width="20%">操作</th>
|
||||||
</tr>
|
</tr>
|
||||||
{% for link in out_links %}
|
{% for link in out_links %}
|
||||||
@@ -58,8 +58,31 @@
|
|||||||
</table>
|
</table>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>暂无</p>
|
<p>暂无</p>
|
||||||
{% endif %}
|
n{% endif %}
|
||||||
|
|
||||||
|
<h3>我管理的文件外链</h3>
|
||||||
|
{% if fileshares %}
|
||||||
|
<table class="sharelink-list">
|
||||||
|
<tr>
|
||||||
|
<th width="25%">文件名</th>
|
||||||
|
<th width="35%">所属目录</th>
|
||||||
|
<th width="20%">查看次数</th>
|
||||||
|
<th width="20%">操作</th>
|
||||||
|
</tr>
|
||||||
|
{% for fs in fileshares %}
|
||||||
|
<tr>
|
||||||
|
<td><a href="{{ SITE_ROOT }}repo/{{ fs.repo.id }}/files/?p={{ fs.path|urlencode }}">{{ fs.filename }}</a></td>
|
||||||
|
<td><a href="{{ SITE_ROOT }}repo/{{ fs.repo.id }}/">{{ fs.repo.name }}</a></td>
|
||||||
|
<td>{{ fs.view_cnt }}</td>
|
||||||
|
<td><a href="#" class="op view-file-link" data="{{ fs.token }}">查看链接</a>
|
||||||
|
<a class="op" href="{{ SITE_ROOT }}sharedlink/remove/?t={{ fs.token }}">删除</a></td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
</table>
|
||||||
|
{% else %}
|
||||||
|
<p>暂无</p>
|
||||||
|
{% endif %}
|
||||||
<div id="view-link" name="view-link" class="hide">
|
<div id="view-link" name="view-link" class="hide">
|
||||||
<p><span class="view-link-alert" style="float:left; margin-left: 120px; "></span></p>
|
<p><span class="view-link-alert" style="float:left; margin-left: 120px; "></span></p>
|
||||||
</div>
|
</div>
|
||||||
@@ -90,5 +113,14 @@ $(".view-link").click(function() {
|
|||||||
return false;
|
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;
|
||||||
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@@ -14,6 +14,7 @@ from seaserv import seafserv_threaded_rpc, get_repo, ccnet_rpc, ccnet_threaded_r
|
|||||||
from forms import RepoShareForm
|
from forms import RepoShareForm
|
||||||
from models import AnonymousShare
|
from models import AnonymousShare
|
||||||
#from seahub.contacts.models import Contact
|
#from seahub.contacts.models import Contact
|
||||||
|
from seahub.share.models import FileShare
|
||||||
from seahub.views import validate_owner, validate_emailuser
|
from seahub.views import validate_owner, validate_emailuser
|
||||||
from seahub.utils import go_permission_error
|
from seahub.utils import go_permission_error
|
||||||
from settings import ANONYMOUS_SHARE_COOKIE_TIMEOUT
|
from settings import ANONYMOUS_SHARE_COOKIE_TIMEOUT
|
||||||
@@ -100,7 +101,8 @@ def share_repo(request):
|
|||||||
@login_required
|
@login_required
|
||||||
def share_admin(request):
|
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
|
username = request.user.username
|
||||||
|
|
||||||
@@ -125,16 +127,23 @@ def share_admin(request):
|
|||||||
|
|
||||||
out_repos.append(repo)
|
out_repos.append(repo)
|
||||||
|
|
||||||
# anonymous share links
|
# Repo anonymous share links
|
||||||
out_links = AnonymousShare.objects.filter(repo_owner=request.user.username)
|
out_links = AnonymousShare.objects.filter(repo_owner=request.user.username)
|
||||||
for link in out_links:
|
for link in out_links:
|
||||||
repo = get_repo(link.repo_id)
|
repo = get_repo(link.repo_id)
|
||||||
link.repo_name = repo.name
|
link.repo_name = repo.name
|
||||||
link.remain_time = anon_share_token_generator.get_remain_time(link.token)
|
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', {
|
return render_to_response('repo/share_admin.html', {
|
||||||
"out_repos": out_repos,
|
"out_repos": out_repos,
|
||||||
"out_links": out_links,
|
"out_links": out_links,
|
||||||
|
"fileshares": fileshares,
|
||||||
"protocol": request.is_secure() and 'https' or 'http',
|
"protocol": request.is_secure() and 'https' or 'http',
|
||||||
"domain": RequestSite(request).domain,
|
"domain": RequestSite(request).domain,
|
||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
|
16
views.py
16
views.py
@@ -12,6 +12,7 @@ from django.core.mail import send_mail
|
|||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.sites.models import Site, RequestSite
|
from django.contrib.sites.models import Site, RequestSite
|
||||||
from django.db import IntegrityError
|
from django.db import IntegrityError
|
||||||
|
from django.db.models import F
|
||||||
from django.http import HttpResponse, HttpResponseRedirect, Http404
|
from django.http import HttpResponse, HttpResponseRedirect, Http404
|
||||||
from django.shortcuts import render_to_response, redirect
|
from django.shortcuts import render_to_response, redirect
|
||||||
from django.template import Context, loader, RequestContext
|
from django.template import Context, loader, RequestContext
|
||||||
@@ -1896,7 +1897,7 @@ def view_shared_file(request, token):
|
|||||||
|
|
||||||
can_preview, filetype = valid_previewed_file(filename)
|
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'
|
tmp_str = '%s/access?repo_id=%s&id=%s&filename=%s&op=%s&t=%s&u=%s'
|
||||||
raw_path = tmp_str % (http_server_root,
|
raw_path = tmp_str % (http_server_root,
|
||||||
repo_id, obj_id,
|
repo_id, obj_id,
|
||||||
@@ -1904,6 +1905,11 @@ def view_shared_file(request, token):
|
|||||||
access_token,
|
access_token,
|
||||||
username)
|
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', {
|
return render_to_response('view_shared_file.html', {
|
||||||
'repo': repo,
|
'repo': repo,
|
||||||
'obj_id': obj_id,
|
'obj_id': obj_id,
|
||||||
@@ -1920,14 +1926,16 @@ def view_shared_file(request, token):
|
|||||||
@login_required
|
@login_required
|
||||||
def remove_shared_link(request):
|
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():
|
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'
|
content_type = 'application/json; charset=utf-8'
|
||||||
|
|
||||||
token = request.GET.get('t', '')
|
|
||||||
FileShare.objects.filter(token=token).delete()
|
FileShare.objects.filter(token=token).delete()
|
||||||
|
|
||||||
msg = '删除成功'
|
msg = '删除成功'
|
||||||
|
Reference in New Issue
Block a user