1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-24 21:07:17 +00:00

create a shared repo in group page

This commit is contained in:
lins05
2012-08-18 17:25:08 +08:00
parent f7de4efa07
commit 3d9e6ba46e
4 changed files with 149 additions and 1 deletions

View File

@@ -0,0 +1,86 @@
//repo-create-form
$('#repo-create')
.click(function() {
$('#repo-create-form').modal({appendTo: '#main', autoResize: true});
})
.hover(
function() {
$(this).css({'background-color': '#fff', 'cursor': 'pointer'});
},
function() {
$(this).css('background-color', '#f5f5f5');
}
);
$('#encrypt-switch').click(function () {
if ($(this).attr('checked')) {
$('#repo-create-form input[type="password"]').attr('disabled', false).removeClass('input-disabled');
} else {
$('#repo-create-form input[type="password"]').attr('disabled', true).addClass('input-disabled');
}
});
$('#repo-create-submit').click(function() {
var passwd = $('#repo-create-form input[name="passwd"]'),
passwd_again = $('#repo-create-form input[name="passwd_again"]');
if (!$('#repo-name').val()) {
apply_form_error('repo-create-form', '目录名不能为空。');
return false;
}
if (!$('#repo-desc').val()) {
apply_form_error('repo-create-form', '描述不能为空。');
return false;
}
if ($('#encrypt-switch').attr('checked')) {
if (!passwd.val()) {
apply_form_error('repo-create-form', '密码不能为空。');
return false;
}
if (!passwd_again.val()) {
apply_form_error('repo-create-form', '请确认密码。');
return false;
}
if (passwd.val().length < 3) {
apply_form_error('repo-create-form', '密码太短');
return false;
}
if (passwd.val().length > 15) {
apply_form_error('repo-create-form', '密码太长。');
return false;
}
if (passwd.val() != passwd_again.val()) {
apply_form_error('repo-create-form', '两次输入的密码不一致。');
return false;
}
}
$.ajax({
url: '{{ SITE_ROOT }}group/{{group_id}}/create-repo/',
type: 'POST',
dataType: 'json',
cache: 'false',
beforeSend: prepareCSRFToken,
data: {
'repo_name': $('#repo-name').val(),
'repo_desc': $('#repo-desc').val(),
'encryption': $('#encrypt-switch').attr('checked') ? 1 : 0,
'passwd': passwd.val(),
'passwd_again': passwd_again.val(),
},
success: function(data) {
console.log(data);
if (data['success']) {
location.reload(true);
} else {
apply_form_error('repo-create-form', data['error']);
}
},
error: function(data, textStatus, jqXHR) {
var errors = $.parseJSON(data.responseText);
$.each(errors, function(index, value) {
apply_form_error('repo-create-form', value[0]);
});
}
});
return false;
});

View File

@@ -49,6 +49,7 @@
<div class="main fleft">
<h3>小组里共享的同步目录</h3>
<button id="repo-create">新建共享目录</button>
{% if repos %}
<table>
<tr>
@@ -180,6 +181,8 @@
</textarea>
{% include "snippets/repo_create_form.html" %}
{% endblock %}
{% block extra_script %}
@@ -251,5 +254,6 @@ $('#user-profile').hover(
}
);
{% include 'group/msg_reply_js.html' %}
{% include 'group/create_group_repo_js.html' %}
</script>
{% endblock %}

View File

@@ -1,13 +1,15 @@
from django.conf.urls.defaults import *
from views import group_list, group_info, group_member_operations, \
group_members, msg_reply, msg_reply_new, group_recommend
group_members, msg_reply, msg_reply_new, group_recommend, \
create_group_repo
urlpatterns = patterns('',
url(r'^(?P<group_id>[\d]+)/$', group_info, name='group_info'),
url(r'^reply/(?P<msg_id>[\d]+)/$', msg_reply, name='msg_reply'),
url(r'^reply/new/$', msg_reply_new, name='msg_reply_new'),
url(r'^(?P<group_id>[\d]+)/members/$', group_members, name='group_members'),
url(r'^(?P<group_id>[\d]+)/create-repo/$', create_group_repo, name='create_group_repo'),
(r'^(?P<group_id>[\d]+)/member/(?P<user_name>[^/]+)/$', group_member_operations),
url(r'^recommend/$', group_recommend, name='group_recommend'),
)

View File

@@ -27,6 +27,7 @@ from seahub.shortcuts import get_first_object_or_none
from seahub.utils import render_error, render_permission_error, \
validate_group_name, string2list
from seahub.views import is_registered_user
from seahub.forms import RepoCreateForm
@login_required
def group_list(request):
@@ -595,3 +596,58 @@ def group_recommend(request):
# TODO: need more clear error message
messages.add_message(request, messages.ERROR, '推荐失败')
return HttpResponseRedirect(next)
@login_required
def create_group_repo(request, group_id):
"""Create a repo and share it to current group"""
content_type = 'application/json; charset=utf-8'
def json_error(err_msg):
result = {'error': [err_msg]}
return HttpResponseBadRequest(json.dumps(result),
content_type=content_type)
group_id = int(group_id)
if not get_group(group_id):
return json_error(u'共享失败:小组不存在')
# Check whether user belong to the group
groups = ccnet_threaded_rpc.get_groups(request.user.username)
for group in groups:
if group.props.id == group_id:
break
else:
return json_error(u"共享失败:未加入该小组")
form = RepoCreateForm(request.POST)
if not form.is_valid():
return json_error(form.errors)
else:
repo_name = form.cleaned_data['repo_name']
repo_desc = form.cleaned_data['repo_desc']
encrypted = form.cleaned_data['encryption']
passwd = form.cleaned_data['passwd']
user = request.user.username
try:
repo_id = seafserv_threaded_rpc.create_repo(repo_name, repo_desc,
user, passwd)
except:
repo_id = None
if not repo_id:
return json_error(u"创建目录失败")
try:
status = seafserv_threaded_rpc.group_share_repo(repo_id, group_id, user, 'rw')
except SearpcError, e:
# if share failed, remove the newly created repo
seafserv_threaded_rpc.remove_repo(repo_id)
return json_error(u'共享失败:内部错误')
else:
if status != 0:
seafserv_threaded_rpc.remove_repo(repo_id)
return json_error(u'共享失败:内部错误')
else:
result = {'success': True}
return HttpResponse(json.dumps(result),
content_type=content_type)