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.id }}</td>
|
||||||
<td>{{ repo.props.desc }}</td>
|
<td>{{ repo.props.desc }}</td>
|
||||||
<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>
|
<button data="{{ SITE_ROOT }}repo/remove/{{ repo.props.id }}/" class="repo-delete-btn">删除</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -58,10 +59,24 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
<p>暂无</p>
|
<p>暂无</p>
|
||||||
{% endif %}
|
{% 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 %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block extra_script %}
|
{% block extra_script %}
|
||||||
<script type="text/javascript">
|
<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'));
|
addConfirmTo($('.repo-delete-btn'));
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@@ -4,6 +4,10 @@
|
|||||||
<li>
|
<li>
|
||||||
<a href="{{ SITE_ROOT }}home/my/" {% block nav_home_class %}{% endblock %}>我的页面</a>
|
<a href="{{ SITE_ROOT }}home/my/" {% block nav_home_class %}{% endblock %}>我的页面</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{{ SITE_ROOT }}shareadmin/" {% block nav_shareadmin_class %}{% endblock %}>共享管理</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
{% if request.user.is_staff %}
|
{% if request.user.is_staff %}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ SITE_ROOT }}seafadmin/" {% block nav_seafadmin_class %}{% endblock %}>目录管理</a>
|
<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, \
|
repo, group, modify_token, remove_repo, seafadmin, useradmin, \
|
||||||
role_add, role_remove, activate_user, user_add, user_remove, \
|
role_add, role_remove, activate_user, user_add, user_remove, \
|
||||||
ownerhome, remove_fetched_repo, repo_set_public, repo_unset_public, \
|
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:
|
# Uncomment the next two lines to enable the admin:
|
||||||
#from django.contrib import admin
|
#from django.contrib import admin
|
||||||
@@ -28,6 +29,10 @@ urlpatterns = patterns('',
|
|||||||
(r'^$', root),
|
(r'^$', root),
|
||||||
url(r'^home/my/$', myhome, name='myhome'),
|
url(r'^home/my/$', myhome, name='myhome'),
|
||||||
url(r'^home/owner/(?P<owner_name>[^/]+)/$', ownerhome, name='ownerhome'),
|
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'^download/$', direct_to_template, { 'template': 'download.html' } ),
|
||||||
(r'^repo/(?P<repo_id>[^/]+)/$', repo),
|
(r'^repo/(?P<repo_id>[^/]+)/$', repo),
|
||||||
(r'^repo/token/modify/(?P<repo_id>[^/]+)/$', modify_token),
|
(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,
|
repo_id, obj_id,
|
||||||
file_name, op, token))
|
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
|
@login_required
|
||||||
def mypeers(request):
|
def mypeers(request):
|
||||||
cid = get_user_cid(request.user)
|
cid = get_user_cid(request.user)
|
||||||
|
Reference in New Issue
Block a user