1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-16 15:19:06 +00:00

Enable transfer library and group

This commit is contained in:
zhengxie
2013-09-11 17:54:01 +08:00
parent 9219d9fd34
commit 43cb4ad5f6
7 changed files with 68 additions and 2 deletions

View File

@@ -188,3 +188,13 @@ class RepoSettingForm(forms.Form):
repo_desc = forms.CharField(error_messages={'required': _('Library description is required')})
days = forms.IntegerField(required=False,
error_messages={'invalid': _('Please enter a number')})
repo_owner = forms.CharField(required=False)
def clean_repo_owner(self):
repo_owner = self.cleaned_data['repo_owner']
try:
User.objects.get(email=repo_owner)
return repo_owner
except User.DoesNotExist:
raise forms.ValidationError(_('User %s is not found.') % repo_owner)

View File

@@ -44,6 +44,7 @@
{% else %}
<li><a href="{% url 'group_make_pub' group.id %}">{% trans "Make Public" %}</a></li>
{% endif %}
<li><a id="group-transfer" href="#" >{% trans "Transfer" %}</a></li>
</ul>
</div>
{% endblock %}
@@ -97,6 +98,13 @@
</table>
{% endif %}
<form id="group-transfer-form" method="post" action="{% url 'group_transfer' group.id %}" name="group-transfer-form" class="hide">{% csrf_token %}
<h3>{% trans "Transfer Group To"%}</h3>
<input type="text" name="email" value="" placeholder="{% trans "email"%}" />
<p class="tip">{% trans "Tip: the email should be already registered."%}</p>
<p class="error hide"></p>
<input type="submit" value="{% trans "Submit"%}" id="group-transfer-submit" />
</form>
{% include 'group/grpmember_add_form.html' %}
{% endblock %}
@@ -128,5 +136,21 @@ contact_list.push({value:contact_email, label:contact_email});
{% with post_url=admin_add_url %}
{% include 'group/grpadmin_add_js.html' %}
{% endwith %}
$('#group-transfer').click(function() {
$('#group-transfer-form').modal({appendTo: "#main", focus:false});
return false;
});
$('#group-transfer-submit').click(function() {
var email = $('#group-transfer-form input[name="email"]').val();
if (!email) {
apply_form_error('group-transfer-form', '{% trans "Email can not be blank."%}');
return false;
}
$('#group-transfer-form').submit();
return false;
});
</script>
{% endblock %}

View File

@@ -6,7 +6,7 @@ from views import group_info, group_members, group_member_operations, group_add_
group_remove_admin, group_discuss, group_wiki, group_wiki_create, \
group_wiki_page_new, group_wiki_page_edit, group_wiki_pages, \
group_wiki_page_delete, group_remove, group_dismiss, group_quit, \
group_make_public, group_revoke_public
group_make_public, group_revoke_public, group_transfer
urlpatterns = patterns('',
url(r'^(?P<group_id>\d+)/$', group_info, name='group_info'),
@@ -23,6 +23,7 @@ urlpatterns = patterns('',
url(r'^(?P<group_id>\d+)/manage/$', group_manage, name='group_manage'),
url(r'^(?P<group_id>\d+)/remove/$', group_remove, name='group_remove'),
url(r'^(?P<group_id>\d+)/dismiss/$', group_dismiss, name='group_dismiss'),
url(r'^(?P<group_id>\d+)/transfer/$', group_transfer, name='group_transfer'),
url(r'^(?P<group_id>\d+)/make_pub/$', group_make_public, name='group_make_pub'),
url(r'^(?P<group_id>\d+)/revoke_pub/$', group_revoke_public, name='group_revoke_pub'),
url(r'^(?P<group_id>\d+)/quit/$', group_quit, name='group_quit'),

View File

@@ -233,6 +233,26 @@ def group_dismiss(request, group_id):
return HttpResponseRedirect(reverse('group_list'))
@login_required
@group_staff_required
def group_transfer(request, group_id):
"""Change group creator.
"""
if request.method != 'POST':
raise Http404
group_id = int(group_id)
username = request.user.username
email = request.POST.get('email', '')
if email != username:
if not is_group_user(group_id, email):
ccnet_threaded_rpc.group_add_member(group_id, username, email)
ccnet_threaded_rpc.set_group_creator(group_id, email)
next = reverse('group_list', args=[])
return HttpResponseRedirect(next)
@login_required
def group_make_public(request, group_id):
"""

View File

@@ -129,6 +129,9 @@
<input type="radio" name="history" value="no_history" {% if history_limit == 0 %}checked="checked"{% endif %} class="vam" /> <span class="vam">{% trans "Don't keep history" %}</span><br />
<input type="radio" name="history" value="partial_history" {% if history_limit > 0 %}checked="checked"{% endif %} class="vam" /> <span calss="vam">{% trans "Only keep a period of history:" %} <input type="text" name="days" size="4" {% if history_limit <= 0 %} disabled="disabled" class="input-disabled" {% else %} value="{{history_limit}}" {% endif %} /> {% trans "days" %}</span><br />
{% endif %}
<label>{% trans "Owner" %}</label><br />
<input type="text" name="repo_owner" value="{{repo_owner}}" class="long-input"/><br />
<p class="error hide"></p>
<input type="submit" value="{% trans "Submit" %}" class="submit" />
<button class="simplemodal-close">{% trans "Cancel" %}</button>
@@ -280,6 +283,7 @@ $('#repo-setting-form').submit(function() {
'repo_id': $('#repo-setting-form input[name="repo_id"]').val(),
'repo_name': $('#repo-setting-form input[name="repo_name"]').val(),
'repo_desc': $('#repo-setting-form input[name="repo_desc"]').val(),
'repo_owner': $('#repo-setting-form input[name="repo_owner"]').val(),
{% if not ENABLE_SUB_LIBRARY or not repo.is_virtual %}
'days': days
{% endif %}

View File

@@ -387,6 +387,7 @@ def repo_save_settings(request):
repo_name = form.cleaned_data['repo_name']
repo_desc = form.cleaned_data['repo_desc']
days = form.cleaned_data['days']
repo_owner = form.cleaned_data['repo_owner']
repo = get_repo(repo_id)
if not repo:
@@ -419,6 +420,10 @@ def repo_save_settings(request):
return HttpResponse(json.dumps({'error': _(u'Failed to save settings on server')}),
status=400, content_type=content_type)
# set library owner
if repo_owner is not None and repo_owner != username:
seafile_api.set_repo_owner(repo_id, repo_owner)
messages.success(request, _(u'Settings saved.'))
return HttpResponse(json.dumps({'success': True}),
content_type=content_type)

View File

@@ -185,8 +185,9 @@ def render_repo(request, repo):
no_quota = is_no_quota(repo.id)
history_limit = seaserv.get_repo_history_limit(repo.id)
search_repo_id = None if repo.encrypted else repo.id
repo_owner = seafile_api.get_repo_owner(repo.id)
is_repo_owner = True if repo_owner == username else False
is_repo_owner = seafile_api.is_repo_owner(username, repo.id)
more_start = None
file_list, dir_list, dirent_more = get_repo_dirents(request, repo.id, head_commit, path, offset=0, limit=100)
if dirent_more:
@@ -209,6 +210,7 @@ def render_repo(request, repo):
return render_to_response('repo.html', {
'repo': repo,
'user_perm': user_perm,
'repo_owner': repo_owner,
'is_repo_owner': is_repo_owner,
'current_commit': head_commit,
'password_set': True,