1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-21 11:27:18 +00:00

Add admin settings page to edit some configurations. Install django constance by pip install 'django-constance[database]'

This commit is contained in:
zhengxie
2015-08-07 16:08:45 +08:00
committed by lian
parent 82113cddba
commit 49fb5ca174
7 changed files with 77 additions and 11 deletions

View File

@@ -6,3 +6,4 @@ Django>=1.5.8,<1.6
Djblets==0.6.14
django-compressor==1.4
django-statici18n==1.1.2
django-constance[database]

View File

@@ -7,7 +7,7 @@ import re
import random
import string
from seaserv import FILE_SERVER_ROOT, FILE_SERVER_PORT
from seaserv import FILE_SERVER_ROOT, FILE_SERVER_PORT, SERVICE_URL
PROJECT_ROOT = os.path.join(os.path.dirname(__file__), os.pardir)
@@ -192,6 +192,8 @@ INSTALLED_APPS = (
'captcha',
'compressor',
'statici18n',
'constance',
'constance.backends.database',
'seahub.api2',
'seahub.avatar',
@@ -209,6 +211,8 @@ INSTALLED_APPS = (
'seahub.password_session',
)
CONSTANCE_BACKEND = 'constance.backends.database.DatabaseBackend'
CONSTANCE_DATABASE_CACHE_BACKEND = 'default'
AUTHENTICATION_BACKENDS = (
'seahub.base.accounts.AuthBackend',
@@ -603,3 +607,12 @@ if 'win32' in sys.platform:
LOGIN_URL = SITE_ROOT + 'accounts/login'
INNER_FILE_SERVER_ROOT = 'http://127.0.0.1:' + FILE_SERVER_PORT
CONSTANCE_CONFIG = {
'SERVICE_URL': (SERVICE_URL, gettext_noop(
"This is outside URL for Seahub(Seafile Web).The domain part (i.e., "
"www.example.com) will be used in generating share links and "
"download/upload file via web. Note: Outside URL means if you use "
"Nginx, it should be the Nginx's address")),
'FILE_SERVER_ROOT': (FILE_SERVER_ROOT, gettext_noop('URL for seafile fileserver')),
}

View File

@@ -8,6 +8,9 @@
<li class="tab {% block cur_info %}{% endblock %}">
<a href="{{ SITE_ROOT }}sys/info/"><span class="sf2-icon-wrench"></span>{% trans "Info" %}</a>
</li>
<li class="tab {% block cur_settings %}{% endblock %}">
<a href="{% url "sys_settings" %}" class="admin">{% trans "Settings" %}</a>
</li>
<li class="tab {% block cur_repo %}{% endblock %}">
<a href="{{ SITE_ROOT }}sys/seafadmin/"><span class="sf2-icon-library"></span>{% trans "Libraries" %}</a>
</li>

View File

@@ -0,0 +1,21 @@
{% extends "sysadmin/base.html" %}
{% load seahub_tags i18n %}
{% block cur_settings %}tab-cur{% endblock %}
{% block right_panel %}
<h3 class="hd">{% trans "Settings" %}</h3>
<form method="post" action=".">{% csrf_token %}
{% for k,v in config_dict.items %}
<label>{{ k }}</label>
<input type="text" name="{{ k }}" value="{{v.0}}" class="input" />
<span>*{{v.1}}</span>
<br>
{% endfor %}
<input type="submit" value="{% trans "Submit" %}" />
</form>
{% endblock %}

View File

@@ -205,6 +205,7 @@ urlpatterns = patterns(
### system admin ###
url(r'^sys/info/$', sys_info, name='sys_info'),
url(r'^sys/settings/$', sys_settings, name='sys_settings'),
url(r'^sys/seafadmin/$', sys_repo_admin, name='sys_repo_admin'),
url(r'^sys/seafadmin/system/$', sys_list_system, name='sys_list_system'),
url(r'^sys/seafadmin/repo-trash/$', sys_repo_trash, name='sys_repo_trash'),

View File

@@ -11,13 +11,12 @@ import locale
import ConfigParser
import mimetypes
import contextlib
from datetime import datetime
from urlparse import urlparse, urljoin
import json
import ccnet
from constance import config
from django.core.urlresolvers import reverse
from django.core.mail import EmailMessage
@@ -36,7 +35,7 @@ from seaserv import seafile_api, send_message, seafserv_rpc, \
CCNET_SERVER_ADDR, CCNET_SERVER_PORT, get_org_by_id, is_org_staff, \
get_org_id_by_group, get_personal_groups_by_user, \
list_personal_repos_by_owner, get_group_repos, \
list_inner_pub_repos, CCNET_CONF_PATH, SERVICE_URL
list_inner_pub_repos, CCNET_CONF_PATH
import seahub.settings
from seahub.settings import SITE_NAME, MEDIA_URL, LOGO_PATH, \
USER_PASSWORD_STRENGTH_LEVEL, USER_PASSWORD_MIN_LENGTH
@@ -167,12 +166,7 @@ def get_fileserver_root():
Returns:
Constructed fileserver root.
"""
from seahub.settings import FILE_SERVER_ROOT
assert FILE_SERVER_ROOT is not None, "SERVICE_URL is not set in ccnet.conf."
return FILE_SERVER_ROOT
return config.FILE_SERVER_ROOT
def get_inner_fileserver_root():
"""Construct inner seafile fileserver address and port.
@@ -725,7 +719,7 @@ def calc_file_path_hash(path, bits=12):
def get_service_url():
"""Get service url from seaserv.
"""
return SERVICE_URL
return config.SERVICE_URL
def get_server_id():
"""Get server id from seaserv.

View File

@@ -1656,3 +1656,36 @@ def sys_sudo_mode(request):
'enable_shib_login': enable_shib_login,
},
context_instance=RequestContext(request))
@login_required
@sys_staff_required
def sys_settings(request):
"""List and change seahub settings in admin panel.
Arguments:
- `request`:
"""
from constance import config
from seahub.settings import CONSTANCE_CONFIG
if request.method == "POST":
for k in request.POST.keys():
if k == 'csrfmiddlewaretoken':
continue
try:
setattr(config, k, request.POST.get(k))
except AttributeError:
continue
messages.success(request, _('Success'))
return HttpResponseRedirect(reverse('sys_settings'))
config_dict = {}
for k in dir(config):
val = getattr(config, k)
help_text = _(CONSTANCE_CONFIG[k][1])
config_dict[k] = (val, help_text)
return render_to_response('sysadmin/settings.html', {
'config_dict': config_dict,
}, context_instance=RequestContext(request))