mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-11 20:01:10 +00:00
Show error msg in ajax when add/rename file or dir
This commit is contained in:
28
forms.py
28
forms.py
@@ -110,7 +110,7 @@ class RepoCreateForm(forms.Form):
|
|||||||
|
|
||||||
class RepoNewFileForm(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': '参数错误'})
|
repo_id = forms.CharField(error_messages={'required': '参数错误'})
|
||||||
parent_dir = forms.CharField(error_messages={'required': '参数错误'})
|
parent_dir = forms.CharField(error_messages={'required': '参数错误'})
|
||||||
@@ -131,9 +131,33 @@ class RepoNewFileForm(forms.Form):
|
|||||||
except SearpcError, e:
|
except SearpcError, e:
|
||||||
raise forms.ValidationError(str(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):
|
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': '参数错误'})
|
repo_id = forms.CharField(error_messages={'required': '参数错误'})
|
||||||
parent_dir = forms.CharField(error_messages={'required': '参数错误'})
|
parent_dir = forms.CharField(error_messages={'required': '参数错误'})
|
||||||
|
@@ -197,22 +197,22 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if not view_history %}
|
{% if not view_history %}
|
||||||
<form id="add-new-dir-form" action="{{ SITE_ROOT}}repo/new_dir/" method="post" class="hide">{% csrf_token %}
|
<form id="add-new-dir-form" action="" method="post" class="hide">{% csrf_token %}
|
||||||
<h4>新目录名称:</h4>
|
<h4>新目录名称:</h4>
|
||||||
<input type="hidden" name="repo_id" value="{{ repo.id }}" />
|
<input type="hidden" name="repo_id" value="{{ repo.id }}" />
|
||||||
<input type="hidden" name="parent_dir" value="{{ path }}" />
|
<input type="hidden" name="parent_dir" value="{{ path }}" />
|
||||||
<input type="text" name="new_dir_name" value="" /><br />
|
<input type="text" name="new_dir_name" value="" /><br />
|
||||||
<p class="error hide">输入不能为空</p>
|
<p class="error hide"></p>
|
||||||
<input type="submit" value="提交" class="submit" />
|
<input type="submit" value="提交" class="submit" />
|
||||||
<button class="simplemodal-close">取消</button>
|
<button class="simplemodal-close">取消</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<form id="add-new-file-form" action="{{ SITE_ROOT}}repo/new_file/" method="post" class="hide">{% csrf_token %}
|
<form id="add-new-file-form" action="" method="post" class="hide">{% csrf_token %}
|
||||||
<h4>新文件名称:</h4>
|
<h4>新文件名称:</h4>
|
||||||
<input type="hidden" name="repo_id" value="{{ repo.id }}" />
|
<input type="hidden" name="repo_id" value="{{ repo.id }}" />
|
||||||
<input type="hidden" name="parent_dir" value="{{ path }}" />
|
<input type="hidden" name="parent_dir" value="{{ path }}" />
|
||||||
<input type="text" name="new_file_name" value="" /><br />
|
<input type="text" name="new_file_name" value="" /><br />
|
||||||
<p class="error hide">输入不能为空</p>
|
<p class="error hide"></p>
|
||||||
<input type="submit" value="提交" class="submit" />
|
<input type="submit" value="提交" class="submit" />
|
||||||
<button class="simplemodal-close">取消</button>
|
<button class="simplemodal-close">取消</button>
|
||||||
</form>
|
</form>
|
||||||
@@ -238,7 +238,7 @@
|
|||||||
<input type="hidden" name="parent_dir" value="{{ path }}" />
|
<input type="hidden" name="parent_dir" value="{{ path }}" />
|
||||||
<input type="hidden" name="oldname" value="" />
|
<input type="hidden" name="oldname" value="" />
|
||||||
<input type="text" name="newname" value="" class="new-name" /><br />
|
<input type="text" name="newname" value="" class="new-name" /><br />
|
||||||
<p class="error hide">输入不能为空。</p>
|
<p class="error hide"></p>
|
||||||
<input type="submit" value="提交" class="submit" />
|
<input type="submit" value="提交" class="submit" />
|
||||||
<button class="simplemodal-close">取消</button>
|
<button class="simplemodal-close">取消</button>
|
||||||
</form>
|
</form>
|
||||||
@@ -398,13 +398,94 @@ $('.file-cp, .file-mv, .dir-cp, .dir-mv').click(function () {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#add-new-dir-form .submit, #add-new-file-form .submit, #rename-form .submit').click(function() {
|
$('#rename-form .submit').click(function() {
|
||||||
if (!$.trim($(this).prev().prev().prev().val())) {//if the input is empty
|
$.ajax({
|
||||||
$(this).prev().removeClass('hide');//show error msg
|
url: '{% url 'views.repo_rename_file' %}',
|
||||||
$('#simplemodal-container').css('height', $(this).parent().height());
|
type: 'POST',
|
||||||
return false;
|
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() {
|
$('#mv-form .submit').click(function() {
|
||||||
if (!$.trim($(this).prev().prev().val())) {//if the input is empty
|
if (!$.trim($(this).prev().prev().val())) {//if the input is empty
|
||||||
$(this).prev().removeClass('hide');//show error msg
|
$(this).prev().removeClass('hide');//show error msg
|
||||||
|
79
views.py
79
views.py
@@ -47,7 +47,7 @@ from group.models import GroupMessage, MessageAttachment
|
|||||||
from group.signals import grpmsg_added
|
from group.signals import grpmsg_added
|
||||||
from seahub.notifications.models import UserNotification
|
from seahub.notifications.models import UserNotification
|
||||||
from forms import AddUserForm, FileLinkShareForm, RepoCreateForm, \
|
from forms import AddUserForm, FileLinkShareForm, RepoCreateForm, \
|
||||||
RepoNewDirForm, RepoNewFileForm, FileCommentForm
|
RepoNewDirForm, RepoNewFileForm, FileCommentForm, RepoRenameFileForm
|
||||||
from utils import render_permission_error, render_error, list_to_string, \
|
from utils import render_permission_error, render_error, list_to_string, \
|
||||||
get_httpserver_root, get_ccnetapplet_root, gen_token, \
|
get_httpserver_root, get_ccnetapplet_root, gen_token, \
|
||||||
calculate_repo_last_modify, valid_previewed_file, \
|
calculate_repo_last_modify, valid_previewed_file, \
|
||||||
@@ -1610,6 +1610,8 @@ def file_upload_progress_page(request):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def repo_new_dir(request):
|
def repo_new_dir(request):
|
||||||
|
result = {}
|
||||||
|
content_type = 'application/json; charset=utf-8'
|
||||||
|
|
||||||
form = RepoNewDirForm(request.POST)
|
form = RepoNewDirForm(request.POST)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
@@ -1618,20 +1620,26 @@ def repo_new_dir(request):
|
|||||||
new_dir_name = form.cleaned_data["new_dir_name"]
|
new_dir_name = form.cleaned_data["new_dir_name"]
|
||||||
user = request.user.username
|
user = request.user.username
|
||||||
else:
|
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)
|
new_dir_name = check_filename_with_rename(repo_id, parent_dir, new_dir_name)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
seafserv_threaded_rpc.post_dir(repo_id, parent_dir, new_dir_name, user)
|
seafserv_threaded_rpc.post_dir(repo_id, parent_dir, new_dir_name, user)
|
||||||
except Exception, e:
|
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')))
|
url = reverse('repo', args=[repo_id]) + \
|
||||||
return HttpResponseRedirect(url)
|
('?p=%s' % urllib2.quote(parent_dir.encode('utf-8')))
|
||||||
|
return HttpResponse(json.dumps({'success': True}),
|
||||||
|
content_type=content_type)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def repo_new_file(request):
|
def repo_new_file(request):
|
||||||
|
result = {}
|
||||||
|
content_type = 'application/json; charset=utf-8'
|
||||||
|
|
||||||
form = RepoNewFileForm(request.POST)
|
form = RepoNewFileForm(request.POST)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
@@ -1640,52 +1648,59 @@ def repo_new_file(request):
|
|||||||
new_file_name = form.cleaned_data["new_file_name"]
|
new_file_name = form.cleaned_data["new_file_name"]
|
||||||
user = request.user.username
|
user = request.user.username
|
||||||
else:
|
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:
|
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:
|
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')))
|
url = reverse('repo', args=[repo_id]) + \
|
||||||
return HttpResponseRedirect(url)
|
('?p=%s' % urllib2.quote(parent_dir.encode('utf-8')))
|
||||||
|
return HttpResponse(json.dumps({'success': True}),
|
||||||
|
content_type=content_type)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def repo_rename_file(request):
|
def repo_rename_file(request):
|
||||||
repo_id = request.POST.get("repo_id")
|
result = {}
|
||||||
parent_dir = request.POST.get("parent_dir")
|
content_type = 'application/json; charset=utf-8'
|
||||||
oldname = request.POST.get("oldname")
|
|
||||||
newname = request.POST.get("newname")
|
|
||||||
user = request.user.username
|
|
||||||
|
|
||||||
if not newname:
|
form = RepoRenameFileForm(request.POST)
|
||||||
error_msg = u"新文件名不能为空"
|
if form.is_valid():
|
||||||
return render_error(request, error_msg)
|
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:
|
if newname == oldname:
|
||||||
url = reverse('repo', args=[repo_id]) + ('?p=%s' % urllib2.quote(parent_dir.encode('utf-8')))
|
return HttpResponse(json.dumps({'success': True}),
|
||||||
return HttpResponseRedirect(url)
|
content_type=content_type)
|
||||||
|
|
||||||
newname = check_filename_with_rename(repo_id, parent_dir, newname)
|
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:
|
try:
|
||||||
seafserv_threaded_rpc.rename_file (repo_id, parent_dir,
|
seafserv_threaded_rpc.rename_file (repo_id, parent_dir,
|
||||||
oldname, newname, user)
|
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:
|
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')))
|
url = reverse('repo', args=[repo_id]) + \
|
||||||
return HttpResponseRedirect(url)
|
('?p=%s' % urllib2.quote(parent_dir.encode('utf-8')))
|
||||||
|
return HttpResponse(json.dumps({'success': True}),
|
||||||
|
content_type=content_type)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def validate_filename(request):
|
def validate_filename(request):
|
||||||
|
Reference in New Issue
Block a user