1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-05 00:43:53 +00:00

Enable change repo name and desc.

This commit is contained in:
zhengxie
2013-02-21 19:53:09 +08:00
parent 37f3631ad8
commit 36a3bd1685
8 changed files with 74 additions and 31 deletions

View File

@@ -107,6 +107,8 @@ def translate_commit_desc(value):
return value.replace('Reverted file to status at', _('Reverted file to status at')) return value.replace('Reverted file to status at', _('Reverted file to status at'))
elif value.startswith('Recovered deleted directory'): elif value.startswith('Recovered deleted directory'):
return value.replace('Recovered deleted directory', _('Recovered deleted directory')) return value.replace('Recovered deleted directory', _('Recovered deleted directory'))
elif value.startswith('Changed library'):
return value.replace('Changed library name or description', _('Changed library name or description'))
elif value.startswith('Merged') or value.startswith('Auto merge'): elif value.startswith('Merged') or value.startswith('Auto merge'):
return _('Auto merge by seafile system') return _('Auto merge by seafile system')
else: else:

View File

@@ -219,5 +219,7 @@ class RepoSettingForm(forms.Form):
Form for saving repo settings. Form for saving repo settings.
""" """
repo_id = forms.CharField(error_messages={'required': _('Repo id is required')}) repo_id = forms.CharField(error_messages={'required': _('Repo id is required')})
repo_name = forms.CharField(error_messages={'required': _('Repo name is required')})
repo_desc = forms.CharField(error_messages={'required': _('Repo description is required')})
days = forms.IntegerField(error_messages={'required': _('Days can\'t be empty'), days = forms.IntegerField(error_messages={'required': _('Days can\'t be empty'),
'invalid': _('Please enter a number')}) 'invalid': _('Please enter a number')})

View File

@@ -1098,6 +1098,9 @@ textarea:-moz-placeholder {/* for FF */
#recycle-btn { #recycle-btn {
background-position:3px -29px; background-position:3px -29px;
} }
#repo-setting-form input[name^="repo"] {
width:100%;
}
#repo-setting-btn { #repo-setting-btn {
background-position:3px -53px; background-position:3px -53px;
} }

View File

@@ -257,6 +257,10 @@
{% if is_repo_owner or request.user.is_staff %} {% if is_repo_owner or request.user.is_staff %}
<form id="repo-setting-form" action="" method="post" class="simple-input-popup hide">{% csrf_token %} <form id="repo-setting-form" action="" method="post" class="simple-input-popup hide">{% csrf_token %}
<h3>{% trans "Library Settings" %}</h3> <h3>{% trans "Library Settings" %}</h3>
<label>{% trans "Name" %}</label><br />
<input type="text" name="repo_name" value="{{ repo.name }}" /><br />
<label>{% trans "Description" %}</label></br />
<input type="text" name="repo_desc" value="{{ repo.desc }}" /><br />
<label>{% trans "History" %}</label><br /> <label>{% trans "History" %}</label><br />
<input type="hidden" name="repo_id" value="{{ repo.id }}" /> <input type="hidden" name="repo_id" value="{{ repo.id }}" />
<input type="radio" name="history" value="full_history" {% if history_limit < 0 %}checked="checked"{% endif %} /> {% trans "Keep full history" %}<br /> <input type="radio" name="history" value="full_history" {% if history_limit < 0 %}checked="checked"{% endif %} /> {% trans "Keep full history" %}<br />
@@ -407,6 +411,8 @@ $('#repo-setting-form').submit(function() {
beforeSend: prepareCSRFToken, beforeSend: prepareCSRFToken,
data: { data: {
'repo_id': $('#repo-setting-form input[name="repo_id"]').val(), '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(),
'days': days 'days': days
}, },
success: function(data) { success: function(data) {

View File

@@ -28,10 +28,8 @@ function listCommitDetails(url, t) {
show(data['newdir'], '{% trans "New directories" %}'); show(data['newdir'], '{% trans "New directories" %}');
show(data['deldir'], '{% trans "Deleted directories" %}'); show(data['deldir'], '{% trans "Deleted directories" %}');
if (!con) { if (!con) {
if (data['init_commit']) { if (data['cmt_desc']) {
con = '<p>' + data['cmt_desc'] + '</p>'; con = '<p>' + data['cmt_desc'] + '</p>';
} else {
con = '<p>{% trans "No conflict in the merge." %}</p>';
} }
} }
$('#ls-ch').css('text-align','left').html(heading + time + con); $('#ls-ch').css('text-align','left').html(heading + time + con);

View File

@@ -19,7 +19,7 @@ from service import get_repos, get_repo, get_commits, get_branches, remove_repo,
list_personal_repos_by_owner, get_repo_token_nonnull, get_repo_owner, \ list_personal_repos_by_owner, get_repo_token_nonnull, get_repo_owner, \
server_repo_size, get_file_id_by_path, get_commit, set_repo_history_limit,\ server_repo_size, get_file_id_by_path, get_commit, set_repo_history_limit,\
get_repo_history_limit, list_inner_pub_repos_by_owner, unset_inner_pub_repo,\ get_repo_history_limit, list_inner_pub_repos_by_owner, unset_inner_pub_repo,\
count_inner_pub_repos count_inner_pub_repos, edit_repo
from service import get_binding_peerids, is_valid_filename, check_permission,\ from service import get_binding_peerids, is_valid_filename, check_permission,\
is_passwd_set is_passwd_set

View File

@@ -362,6 +362,14 @@ def get_repos():
def get_repo(repo_id): def get_repo(repo_id):
return seafserv_threaded_rpc.get_repo(repo_id) return seafserv_threaded_rpc.get_repo(repo_id)
def edit_repo(repo_id, name, desc, user):
try:
ret = seafserv_threaded_rpc.edit_repo(repo_id, name, desc, user)
except SearpcError, e:
print str(e)
ret = -1
return True if ret == 0 else False
def remove_repo(repo_id): def remove_repo(repo_id):
seafserv_threaded_rpc.remove_repo(repo_id) seafserv_threaded_rpc.remove_repo(repo_id)

View File

@@ -39,7 +39,7 @@ from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_repos, get_emailusers, \
get_group, get_shared_groups_by_repo, is_group_user, check_permission, \ get_group, get_shared_groups_by_repo, is_group_user, check_permission, \
list_personal_shared_repos, is_org_group, get_org_id_by_group, is_org_repo,\ list_personal_shared_repos, is_org_group, get_org_id_by_group, is_org_repo,\
list_inner_pub_repos, get_org_groups_by_repo, is_org_repo_owner, \ list_inner_pub_repos, get_org_groups_by_repo, is_org_repo_owner, \
get_org_repo_owner, is_passwd_set, get_file_size, check_quota, \ get_org_repo_owner, is_passwd_set, get_file_size, check_quota, edit_repo,\
get_related_users_by_repo, get_related_users_by_org_repo, HtmlDiff, \ get_related_users_by_repo, get_related_users_by_org_repo, HtmlDiff, \
get_session_info, get_group_repoids, get_repo_owner, get_file_id_by_path, \ get_session_info, get_group_repoids, get_repo_owner, get_file_id_by_path, \
get_repo_history_limit, set_repo_history_limit, MAX_UPLOAD_FILE_SIZE, \ get_repo_history_limit, set_repo_history_limit, MAX_UPLOAD_FILE_SIZE, \
@@ -555,24 +555,48 @@ def repo_recycle_view(request, repo_id):
@login_required @login_required
@ctx_switch_required @ctx_switch_required
def repo_save_settings(request): def repo_save_settings(request):
if request.method == 'POST': if request.method != 'POST':
content_type = 'application/json; charset=utf-8' raise Http404
form = RepoSettingForm(request.POST) username = request.user.username
if form.is_valid(): content_type = 'application/json; charset=utf-8'
repo_id = form.cleaned_data['repo_id']
days = form.cleaned_data['days']
res = set_repo_history_limit(repo_id, days) form = RepoSettingForm(request.POST)
if res == 0: if form.is_valid():
messages.success(request, _(u'Settings saved.')) repo_id = form.cleaned_data['repo_id']
return HttpResponse(json.dumps({'success': True}), content_type=content_type) if request.user.org:
else: is_owner = True if is_org_repo_owner(
return HttpResponse(json.dumps({'error': _(u'Failed to save settings on server')}), request.user.org['org_id'], repo_id, username) else False
status=400, content_type=content_type)
else: else:
return HttpResponse(json.dumps({'error': str(form.errors.values()[0])}), is_owner = True if is_repo_owner(username, repo_id) else False
status=400, content_type=content_type) if not is_owner:
err_msg = _(u'You do not have permission to perform this action.')
return HttpResponse(json.dumps({'error': err_msg}),
status=403, content_type=content_type)
repo_name = form.cleaned_data['repo_name']
repo_desc = form.cleaned_data['repo_desc']
days = form.cleaned_data['days']
if edit_repo(repo_id, repo_name, repo_desc, username):
return HttpResponse(json.dumps({'success': True}),
content_type=content_type)
else:
err_msg = _(u'Failed to edit repo information.')
return HttpResponse(json.dumps({'error': err_msg}),
status=500, content_type=content_type)
res = set_repo_history_limit(repo_id, days)
if res == 0:
messages.success(request, _(u'Settings saved.'))
return HttpResponse(json.dumps({'success': True}),
content_type=content_type)
else:
return HttpResponse(json.dumps({'error': _(u'Failed to save settings on server')}),
status=400, content_type=content_type)
else:
return HttpResponse(json.dumps({'error': str(form.errors.values()[0])}),
status=400, content_type=content_type)
def upload_error_msg (code): def upload_error_msg (code):
err_msg = _(u'Internal Server Error') err_msg = _(u'Internal Server Error')
@@ -854,31 +878,31 @@ def repo_history_changes(request, repo_id):
content_type = 'application/json; charset=utf-8' content_type = 'application/json; charset=utf-8'
if not access_to_repo(request, repo_id, ''): if not access_to_repo(request, repo_id, ''):
return HttpResponse(json.dumps(changes), return HttpResponse(json.dumps(changes), content_type=content_type)
content_type=content_type)
repo = get_repo(repo_id) repo = get_repo(repo_id)
if not repo: if not repo:
return HttpResponse(json.dumps(changes), return HttpResponse(json.dumps(changes), content_type=content_type)
content_type=content_type)
if repo.encrypted and not is_passwd_set(repo_id, request.user.username): if repo.encrypted and not is_passwd_set(repo_id, request.user.username):
return HttpResponse(json.dumps(changes), return HttpResponse(json.dumps(changes), content_type=content_type)
content_type=content_type)
commit_id = request.GET.get('commit_id', '') commit_id = request.GET.get('commit_id', '')
if not commit_id: if not commit_id:
return HttpResponse(json.dumps(changes), return HttpResponse(json.dumps(changes), content_type=content_type)
content_type=content_type)
changes = get_diff(repo_id, '', commit_id) changes = get_diff(repo_id, '', commit_id)
if get_commit(commit_id).parent_id is None: c = get_commit(commit_id)
if c.parent_id is None:
# A commit is a first commit only if it's parent id is None. # A commit is a first commit only if it's parent id is None.
changes['init_commit'] = True
changes['cmt_desc'] = repo.desc changes['cmt_desc'] = repo.desc
elif c.second_parent_id is None:
# Normal commit only has one parent.
changes['cmt_desc'] = c.desc
else: else:
changes['init_commit'] = False # A commit is a merge only if it has two parents.
changes['cmt_desc'] = _('No conflict in the merge.')
return HttpResponse(json.dumps(changes), content_type=content_type) return HttpResponse(json.dumps(changes), content_type=content_type)