mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-25 14:50:29 +00:00
Add repo share feature
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
<td>{{ repo.props.id }}</td>
|
||||
<td>{{ repo.props.desc }}</td>
|
||||
<td>
|
||||
<button data="{{ repo.props.id }}" class="repo-share-btn">共享</button>
|
||||
<button data="{{ SITE_ROOT }}repo/remove/{{ repo.props.id }}/" class="repo-delete-btn">删除</button>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -58,10 +59,24 @@
|
||||
{% else %}
|
||||
<p>暂无</p>
|
||||
{% endif %}
|
||||
|
||||
<form id="repo-share-form" action="/repo/addshare/" method="post" name="repo-share-form" class="hide">
|
||||
<label>邮箱</label><br />
|
||||
<input id="to_email" type="text" name="to_email" value="" maxlength="40" /><br/>
|
||||
<input id="share_repo_id" type="hidden" name="share_repo_id" value="" />
|
||||
<input type="submit" value="提交" />
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_script %}
|
||||
<script type="text/javascript">
|
||||
$(".repo-share-btn").click(function() {
|
||||
repo_id = $(this).attr("data");
|
||||
$("#share_repo_id").val(repo_id);
|
||||
$("#repo-share-form").modal({appendTo: "#main", containerCss:{padding:18}});
|
||||
});
|
||||
|
||||
addConfirmTo($('.repo-delete-btn'));
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
@@ -4,6 +4,10 @@
|
||||
<li>
|
||||
<a href="{{ SITE_ROOT }}home/my/" {% block nav_home_class %}{% endblock %}>我的页面</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ SITE_ROOT }}shareadmin/" {% block nav_shareadmin_class %}{% endblock %}>共享管理</a>
|
||||
</li>
|
||||
|
||||
{% if request.user.is_staff %}
|
||||
<li>
|
||||
<a href="{{ SITE_ROOT }}seafadmin/" {% block nav_seafadmin_class %}{% endblock %}>目录管理</a>
|
||||
|
63
templates/share_repos.html
Normal file
63
templates/share_repos.html
Normal file
@@ -0,0 +1,63 @@
|
||||
{% extends "myhome_base.html" %}
|
||||
|
||||
{% block nav_shareadmin_class %}class="cur"{% endblock %}
|
||||
|
||||
{% block right_panel %}
|
||||
|
||||
<h3>我共享的同步目录</h3>
|
||||
{% if out_repos %}
|
||||
<table class="repo-list">
|
||||
<tr>
|
||||
<th width="12%">名字</th>
|
||||
<th width="33%">邮箱</th>
|
||||
<th width="40%">描述</th>
|
||||
<th width="15%">操作</th>
|
||||
</tr>
|
||||
|
||||
{% for repo in out_repos %}
|
||||
<tr>
|
||||
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}">{{ repo.props.name }}</a></td>
|
||||
<td>{{ repo.props.shared_email }}</td>
|
||||
<td>{{ repo.props.desc }}</td>
|
||||
<td>
|
||||
<a href="{{ SITE_ROOT }}shareadmin/remove/{{ repo.props.id }}/{{ repo.props.shared_email }}/">取消共享</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% else %}
|
||||
<p>暂无</p>
|
||||
{% endif %}
|
||||
|
||||
<h3>共享给我的同步目录</h3>
|
||||
{% if in_repos %}
|
||||
<table class="repo-list">
|
||||
<tr>
|
||||
<th width="12%">名字</th>
|
||||
<th width="33%">邮箱</th>
|
||||
<th width="40%">描述</th>
|
||||
<th width="15%">操作</th>
|
||||
</tr>
|
||||
|
||||
{% for repo in in_repos %}
|
||||
<tr>
|
||||
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}">{{ repo.props.name }}</a></td>
|
||||
<td>{{ repo.props.shared_email }}</td>
|
||||
<td>{{ repo.props.desc }}</td>
|
||||
<td>
|
||||
<a href="#">下载</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% else %}
|
||||
<p>暂无</p>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_script %}
|
||||
<script type="text/javascript">
|
||||
addConfirmTo($('.repo-delete-btn'));
|
||||
</script>
|
||||
{% endblock %}
|
7
urls.py
7
urls.py
@@ -6,7 +6,8 @@ from seahub.views import root, peers, groups, myhome, \
|
||||
repo, group, modify_token, remove_repo, seafadmin, useradmin, \
|
||||
role_add, role_remove, activate_user, user_add, user_remove, \
|
||||
ownerhome, remove_fetched_repo, repo_set_public, repo_unset_public, \
|
||||
repo_list_dir, user_info, repo_set_access_property, repo_operation_file
|
||||
repo_list_dir, user_info, repo_set_access_property, repo_operation_file, \
|
||||
repo_add_share, repo_list_share, repo_remove_share
|
||||
|
||||
# Uncomment the next two lines to enable the admin:
|
||||
#from django.contrib import admin
|
||||
@@ -28,6 +29,10 @@ urlpatterns = patterns('',
|
||||
(r'^$', root),
|
||||
url(r'^home/my/$', myhome, name='myhome'),
|
||||
url(r'^home/owner/(?P<owner_name>[^/]+)/$', ownerhome, name='ownerhome'),
|
||||
url(r'^repo/addshare/$', repo_add_share, name='repo_add_share'),
|
||||
url(r'^shareadmin/$', repo_list_share, name='repo_list_share'),
|
||||
(r'^shareadmin/remove/(?P<repo_id>[^/]+)/(?P<to_email>[^/]+)/$', repo_remove_share),
|
||||
|
||||
(r'^download/$', direct_to_template, { 'template': 'download.html' } ),
|
||||
(r'^repo/(?P<repo_id>[^/]+)/$', repo),
|
||||
(r'^repo/token/modify/(?P<repo_id>[^/]+)/$', modify_token),
|
||||
|
34
views.py
34
views.py
@@ -331,6 +331,40 @@ def repo_operation_file(request, op, repo_id, obj_id, file_name):
|
||||
repo_id, obj_id,
|
||||
file_name, op, token))
|
||||
|
||||
@login_required
|
||||
def repo_add_share(request):
|
||||
if request.method == 'POST':
|
||||
from_email = request.user.username
|
||||
repo_id = request.POST.get('share_repo_id', '')
|
||||
to_email = request.POST.get('to_email', '')
|
||||
|
||||
if validate_owner(request, repo_id):
|
||||
seafserv_threaded_rpc.add_share(repo_id, from_email, to_email, 'rw')
|
||||
|
||||
return HttpResponseRedirect(request.META['HTTP_REFERER'])
|
||||
|
||||
@login_required
|
||||
def repo_list_share(request):
|
||||
username = request.user.username
|
||||
|
||||
out_repos = seafserv_threaded_rpc.list_share_repos(username, 'from_email', -1, -1)
|
||||
in_repos = seafserv_threaded_rpc.list_share_repos(username, 'to_email', -1, -1)
|
||||
|
||||
return render_to_response('share_repos.html', {
|
||||
"out_repos": out_repos,
|
||||
"in_repos": in_repos,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def repo_remove_share(request, repo_id, to_email):
|
||||
if not validate_owner(request, repo_id):
|
||||
raise Http404
|
||||
|
||||
from_email = request.user.username
|
||||
seafserv_threaded_rpc.remove_share(repo_id, from_email, to_email)
|
||||
|
||||
return HttpResponseRedirect(request.META['HTTP_REFERER'])
|
||||
|
||||
@login_required
|
||||
def mypeers(request):
|
||||
cid = get_user_cid(request.user)
|
||||
|
Reference in New Issue
Block a user