diff --git a/forms.py b/forms.py
index 04f2024a7f..5eab93e03b 100644
--- a/forms.py
+++ b/forms.py
@@ -110,7 +110,7 @@ class RepoCreateForm(forms.Form):
class RepoNewFileForm(forms.Form):
"""
- Form for create a new empty file
+ Form for create a new empty file.
"""
repo_id = forms.CharField(error_messages={'required': '参数错误'})
parent_dir = forms.CharField(error_messages={'required': '参数错误'})
@@ -131,9 +131,33 @@ class RepoNewFileForm(forms.Form):
except SearpcError, e:
raise forms.ValidationError(str(e))
+class RepoRenameFileForm(forms.Form):
+ """
+ Form for rename a file.
+ """
+ repo_id = forms.CharField(error_messages={'required': '参数错误'})
+ parent_dir = forms.CharField(error_messages={'required': '参数错误'})
+ oldname = forms.CharField(error_messages={'required': '参数错误'})
+ newname = forms.CharField(max_length=settings.MAX_UPLOAD_FILE_NAME_LEN,
+ error_messages={
+ 'max_length': '新文件名太长',
+ 'required': '新文件名不能为空',
+ })
+
+ def clean_newname(self):
+ newname = self.cleaned_data['newname']
+ try:
+ if not is_valid_filename(newname):
+ error_msg = u"您输入的文件名 %s 包含非法字符" % newname
+ raise forms.ValidationError(error_msg)
+ else:
+ return newname
+ except SearpcError, e:
+ raise forms.ValidationError(str(e))
+
class RepoNewDirForm(forms.Form):
"""
- Form for create a new empty dir
+ Form for create a new empty dir.
"""
repo_id = forms.CharField(error_messages={'required': '参数错误'})
parent_dir = forms.CharField(error_messages={'required': '参数错误'})
diff --git a/templates/repo.html b/templates/repo.html
index 0bf1797c1e..400ef0c3a0 100644
--- a/templates/repo.html
+++ b/templates/repo.html
@@ -197,22 +197,22 @@
{% if not view_history %}
-
-
@@ -238,7 +238,7 @@
- 输入不能为空。
+
@@ -398,13 +398,94 @@ $('.file-cp, .file-mv, .dir-cp, .dir-mv').click(function () {
return false;
});
-$('#add-new-dir-form .submit, #add-new-file-form .submit, #rename-form .submit').click(function() {
- if (!$.trim($(this).prev().prev().prev().val())) {//if the input is empty
- $(this).prev().removeClass('hide');//show error msg
- $('#simplemodal-container').css('height', $(this).parent().height());
- return false;
- }
+$('#rename-form .submit').click(function() {
+ $.ajax({
+ url: '{% url 'views.repo_rename_file' %}',
+ type: 'POST',
+ dataType: 'json',
+ cache: 'false',
+ beforeSend: prepareCSRFToken,
+ data: {
+ 'repo_id': $('#rename-form input[name="repo_id"]').val(),
+ 'parent_dir': $('#rename-form input[name="parent_dir"]').val(),
+ 'oldname': $('#rename-form input[name="oldname"]').val(),
+ 'newname': $('#rename-form input[name="newname"]').val()
+ },
+ success: function(data) {
+ if (data['success']) {
+ location.reload(true);
+ } else {
+ apply_form_error('rename-form', data['error']);
+ }
+ },
+ error: function(data, textStatus, jqXHR) {
+ var errors = $.parseJSON(data.responseText);
+ $.each(errors, function(index, value) {
+ apply_form_error('rename-form', value[0]);
+ });
+ }
+ });
+ return false;
});
+
+$('#add-new-file-form .submit').click(function() {
+ $.ajax({
+ url: '{% url 'views.repo_new_file' %}',
+ type: 'POST',
+ dataType: 'json',
+ cache: 'false',
+ beforeSend: prepareCSRFToken,
+ data: {
+ 'repo_id': $('#add-new-file-form input[name="repo_id"]').val(),
+ 'parent_dir': $('#add-new-file-form input[name="parent_dir"]').val(),
+ 'new_file_name': $('#add-new-file-form input[name="new_file_name"]').val()
+ },
+ success: function(data) {
+ if (data['success']) {
+ location.reload(true);
+ } else {
+ apply_form_error('add-new-file-form', data['error']);
+ }
+ },
+ error: function(data, textStatus, jqXHR) {
+ var errors = $.parseJSON(data.responseText);
+ $.each(errors, function(index, value) {
+ apply_form_error('add-new-file-form', value[0]);
+ });
+ }
+ });
+ return false;
+});
+
+$('#add-new-dir-form .submit').click(function() {
+ $.ajax({
+ url: '{% url 'views.repo_new_dir' %}',
+ type: 'POST',
+ dataType: 'json',
+ cache: 'false',
+ beforeSend: prepareCSRFToken,
+ data: {
+ 'repo_id': $('#add-new-dir-form input[name="repo_id"]').val(),
+ 'parent_dir': $('#add-new-dir-form input[name="parent_dir"]').val(),
+ 'new_dir_name': $('#add-new-dir-form input[name="new_dir_name"]').val()
+ },
+ success: function(data) {
+ if (data['success']) {
+ location.reload(true);
+ } else {
+ apply_form_error('add-new-dir-form', data['error']);
+ }
+ },
+ error: function(data, textStatus, jqXHR) {
+ var errors = $.parseJSON(data.responseText);
+ $.each(errors, function(index, value) {
+ apply_form_error('add-new-dir-form', value[0]);
+ });
+ }
+ });
+ return false;
+});
+
$('#mv-form .submit').click(function() {
if (!$.trim($(this).prev().prev().val())) {//if the input is empty
$(this).prev().removeClass('hide');//show error msg
diff --git a/views.py b/views.py
index b17ba17240..50b9bca51c 100644
--- a/views.py
+++ b/views.py
@@ -47,7 +47,7 @@ from group.models import GroupMessage, MessageAttachment
from group.signals import grpmsg_added
from seahub.notifications.models import UserNotification
from forms import AddUserForm, FileLinkShareForm, RepoCreateForm, \
- RepoNewDirForm, RepoNewFileForm, FileCommentForm
+ RepoNewDirForm, RepoNewFileForm, FileCommentForm, RepoRenameFileForm
from utils import render_permission_error, render_error, list_to_string, \
get_httpserver_root, get_ccnetapplet_root, gen_token, \
calculate_repo_last_modify, valid_previewed_file, \
@@ -1610,7 +1610,9 @@ def file_upload_progress_page(request):
@login_required
def repo_new_dir(request):
-
+ result = {}
+ content_type = 'application/json; charset=utf-8'
+
form = RepoNewDirForm(request.POST)
if form.is_valid():
repo_id = form.cleaned_data["repo_id"]
@@ -1618,20 +1620,26 @@ def repo_new_dir(request):
new_dir_name = form.cleaned_data["new_dir_name"]
user = request.user.username
else:
- return render_error(request, form.errors.values()[0])
+ result['error'] = str(form.errors.values()[0])
+ return HttpResponse(json.dumps(result), content_type=content_type)
new_dir_name = check_filename_with_rename(repo_id, parent_dir, new_dir_name)
try:
seafserv_threaded_rpc.post_dir(repo_id, parent_dir, new_dir_name, user)
except Exception, e:
- return render_error(request, str(e))
+ result['error'] = str(e)
+ return HttpResponse(json.dumps(result), content_type=content_type)
- url = reverse('repo', args=[repo_id]) + ('?p=%s' % urllib2.quote(parent_dir.encode('utf-8')))
- return HttpResponseRedirect(url)
+ url = reverse('repo', args=[repo_id]) + \
+ ('?p=%s' % urllib2.quote(parent_dir.encode('utf-8')))
+ return HttpResponse(json.dumps({'success': True}),
+ content_type=content_type)
@login_required
def repo_new_file(request):
+ result = {}
+ content_type = 'application/json; charset=utf-8'
form = RepoNewFileForm(request.POST)
if form.is_valid():
@@ -1640,52 +1648,59 @@ def repo_new_file(request):
new_file_name = form.cleaned_data["new_file_name"]
user = request.user.username
else:
- return render_error(request, form.errors.values()[0])
+ result['error'] = str(form.errors.values()[0])
+ return HttpResponse(json.dumps(result), content_type=content_type)
- new_file_name = check_filename_with_rename(repo_id, parent_dir, new_file_name)
+ new_file_name = check_filename_with_rename(repo_id, parent_dir,
+ new_file_name)
try:
- seafserv_threaded_rpc.post_empty_file(repo_id, parent_dir, new_file_name, user)
+ seafserv_threaded_rpc.post_empty_file(repo_id, parent_dir,
+ new_file_name, user)
except Exception, e:
- return render_error(request, str(e))
+ result['error'] = str(e)
+ return HttpResponse(json.dumps(result), content_type=content_type)
- url = reverse('repo', args=[repo_id]) + ('?p=%s' % urllib2.quote(parent_dir.encode('utf-8')))
- return HttpResponseRedirect(url)
+ url = reverse('repo', args=[repo_id]) + \
+ ('?p=%s' % urllib2.quote(parent_dir.encode('utf-8')))
+ return HttpResponse(json.dumps({'success': True}),
+ content_type=content_type)
@login_required
def repo_rename_file(request):
- repo_id = request.POST.get("repo_id")
- parent_dir = request.POST.get("parent_dir")
- oldname = request.POST.get("oldname")
- newname = request.POST.get("newname")
- user = request.user.username
+ result = {}
+ content_type = 'application/json; charset=utf-8'
- if not newname:
- error_msg = u"新文件名不能为空"
- return render_error(request, error_msg)
+ form = RepoRenameFileForm(request.POST)
+ if form.is_valid():
+ repo_id = form.cleaned_data["repo_id"]
+ parent_dir = form.cleaned_data["parent_dir"]
+ oldname = form.cleaned_data["oldname"]
+ newname = form.cleaned_data["newname"]
+ user = request.user.username
+ else:
+ result['error'] = str(form.errors.values()[0])
+ return HttpResponse(json.dumps(result), content_type=content_type)
if newname == oldname:
- url = reverse('repo', args=[repo_id]) + ('?p=%s' % urllib2.quote(parent_dir.encode('utf-8')))
- return HttpResponseRedirect(url)
+ return HttpResponse(json.dumps({'success': True}),
+ content_type=content_type)
newname = check_filename_with_rename(repo_id, parent_dir, newname)
- if len(newname) > settings.MAX_UPLOAD_FILE_NAME_LEN:
- error_msg = u"新文件名太长"
- return render_error(request, error_msg)
-
- if not (repo_id and parent_dir and oldname):
- return render_error(request)
-
try:
seafserv_threaded_rpc.rename_file (repo_id, parent_dir,
oldname, newname, user)
- messages.add_message(request, messages.INFO, u'%s 已重命名为 %s。' % (oldname, newname))
+ messages.add_message(request, messages.INFO, u'%s 已重命名为 %s。' % \
+ (oldname, newname))
except Exception, e:
- return render_error(request, str(e))
+ result['error'] = str(e)
+ return HttpResponse(json.dumps(result), content_type=content_type)
- url = reverse('repo', args=[repo_id]) + ('?p=%s' % urllib2.quote(parent_dir.encode('utf-8')))
- return HttpResponseRedirect(url)
+ url = reverse('repo', args=[repo_id]) + \
+ ('?p=%s' % urllib2.quote(parent_dir.encode('utf-8')))
+ return HttpResponse(json.dumps({'success': True}),
+ content_type=content_type)
@login_required
def validate_filename(request):