1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-15 13:43:36 +00:00

update user personal wiki module

This commit is contained in:
lian 2016-08-23 14:50:05 +08:00 committed by lian
parent 7472c03bec
commit d05f72b7a0
7 changed files with 135 additions and 35 deletions

View File

@ -0,0 +1,68 @@
# Copyright (c) 2012-2016 Seafile Ltd.
import logging
from rest_framework.authentication import SessionAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from seahub.api2.authentication import TokenAuthentication
from seahub.api2.throttling import UserRateThrottle
from seahub.api2.utils import api_error
from seahub.views.modules import MOD_PERSONAL_WIKI, enable_mod_for_user, \
disable_mod_for_user
logger = logging.getLogger(__name__)
json_content_type = 'application/json; charset=utf-8'
class UserEnabledModulesView(APIView):
authentication_classes = (TokenAuthentication, SessionAuthentication)
permission_classes = (IsAuthenticated,)
throttle_classes = (UserRateThrottle,)
def post(self, request):
""" currently only used for add personal wiki module
Permission checking:
1. login user.
2. user can add repo
"""
if not request.user.permissions.can_add_repo:
error_msg = 'Permission denied.'
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
username = request.user.username
try:
enable_mod_for_user(username, MOD_PERSONAL_WIKI)
except Exception as e:
logger.error(e)
error_msg = 'Internal Server Error'
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
return Response({'success': True})
def delete(self, request):
""" currently only used for delete personal wiki module
Permission checking:
1. login user.
2. user can add repo
"""
if not request.user.permissions.can_add_repo:
error_msg = 'Permission denied.'
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
username = request.user.username
try:
disable_mod_for_user(username, MOD_PERSONAL_WIKI)
except Exception as e:
logger.error(e)
error_msg = 'Internal Server Error'
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
return Response({'success': True})

View File

@ -34,6 +34,7 @@ from seahub.api2.endpoints.query_zip_progress import QueryZipProgressView
from seahub.api2.endpoints.invitations import InvitationsView from seahub.api2.endpoints.invitations import InvitationsView
from seahub.api2.endpoints.invitation import InvitationView from seahub.api2.endpoints.invitation import InvitationView
from seahub.api2.endpoints.notifications import NotificationsView, NotificationView from seahub.api2.endpoints.notifications import NotificationsView, NotificationView
from seahub.api2.endpoints.user_enabled_modules import UserEnabledModulesView
from seahub.api2.endpoints.admin.login import Login from seahub.api2.endpoints.admin.login import Login
from seahub.api2.endpoints.admin.file_audit import FileAudit from seahub.api2.endpoints.admin.file_audit import FileAudit
@ -153,7 +154,6 @@ urlpatterns = patterns(
url(r'^ajax/group/(?P<group_id>\d+)/repos/$', get_unenc_group_repos, name='get_group_repos'), url(r'^ajax/group/(?P<group_id>\d+)/repos/$', get_unenc_group_repos, name='get_group_repos'),
url(r'^ajax/group/(?P<group_id>\d+)/toggle-modules/$', toggle_group_modules, name='toggle_group_modules'), url(r'^ajax/group/(?P<group_id>\d+)/toggle-modules/$', toggle_group_modules, name='toggle_group_modules'),
url(r'^ajax/group/(?P<group_id>\d+)/members/import/$', ajax_group_members_import, name='ajax_group_members_import'), url(r'^ajax/group/(?P<group_id>\d+)/members/import/$', ajax_group_members_import, name='ajax_group_members_import'),
url(r'^ajax/toggle-personal-modules/$', toggle_personal_modules, name='toggle_personal_modules'),
url(r'^ajax/unenc-rw-repos/$', unenc_rw_repos, name='unenc_rw_repos'), url(r'^ajax/unenc-rw-repos/$', unenc_rw_repos, name='unenc_rw_repos'),
url(r'^ajax/upload-file-done/$', upload_file_done, name='upload_file_done'), url(r'^ajax/upload-file-done/$', upload_file_done, name='upload_file_done'),
url(r'^ajax/get_popup_notices/$', get_popup_notices, name='get_popup_notices'), url(r'^ajax/get_popup_notices/$', get_popup_notices, name='get_popup_notices'),
@ -197,6 +197,7 @@ urlpatterns = patterns(
url(r'^api/v2.1/invitations/(?P<token>[a-f0-9]{32})/$', InvitationView.as_view()), url(r'^api/v2.1/invitations/(?P<token>[a-f0-9]{32})/$', InvitationView.as_view()),
url(r'^api/v2.1/notifications/$', NotificationsView.as_view(), name='api-v2.1-notifications'), url(r'^api/v2.1/notifications/$', NotificationsView.as_view(), name='api-v2.1-notifications'),
url(r'^api/v2.1/notification/$', NotificationView.as_view(), name='api-v2.1-notification'), url(r'^api/v2.1/notification/$', NotificationView.as_view(), name='api-v2.1-notification'),
url(r'^api/v2.1/user-enabled-modules/$', UserEnabledModulesView.as_view(), name='api-v2.1-user-enabled-module'),
url(r'^api/v2.1/admin/sysinfo/$', SysInfo.as_view(), name='api-v2.1-sysinfo'), url(r'^api/v2.1/admin/sysinfo/$', SysInfo.as_view(), name='api-v2.1-sysinfo'),
url(r'^api/v2.1/admin/devices/$', AdminDevices.as_view(), name='api-v2.1-admin-devices'), url(r'^api/v2.1/admin/devices/$', AdminDevices.as_view(), name='api-v2.1-admin-devices'),

View File

@ -1993,28 +1993,6 @@ def toggle_group_modules(request, group_id):
return HttpResponse(json.dumps({ "success": True }), return HttpResponse(json.dumps({ "success": True }),
content_type=content_type) content_type=content_type)
@login_required_ajax
def toggle_personal_modules(request):
content_type = 'application/json; charset=utf-8'
result = {}
if not request.user.permissions.can_add_repo:
result["error"] = _('Permission denied.')
return HttpResponse(json.dumps(result),
status=403, content_type=content_type)
username = request.user.username
personal_wiki = request.POST.get('personal_wiki', '')
if personal_wiki == 'true':
enable_mod_for_user(username, MOD_PERSONAL_WIKI)
else:
disable_mod_for_user(username, MOD_PERSONAL_WIKI)
return HttpResponse(json.dumps({ "success": True }),
content_type=content_type)
@login_required_ajax @login_required_ajax
def ajax_group_members_import(request, group_id): def ajax_group_members_import(request, group_id):
"""Import users to group. """Import users to group.

View File

@ -1,6 +1,5 @@
# Copyright (c) 2012-2016 Seafile Ltd. # Copyright (c) 2012-2016 Seafile Ltd.
from seahub.base.models import UserEnabledModule, GroupEnabledModule from seahub.base.models import UserEnabledModule, GroupEnabledModule
from seahub.wiki.models import PersonalWiki
MOD_PERSONAL_WIKI = 'personal wiki' MOD_PERSONAL_WIKI = 'personal wiki'
MOD_GROUP_WIKI = 'group wiki' MOD_GROUP_WIKI = 'group wiki'

View File

@ -93,19 +93,30 @@ define([
var checkbox = $('[name="personal_wiki"]'), var checkbox = $('[name="personal_wiki"]'),
original_checked = checkbox.prop('checked'), original_checked = checkbox.prop('checked'),
_this = this; _this = this;
form.submit(function() { form.submit(function() {
var cur_checked = checkbox.prop('checked'); var cur_checked = checkbox.prop('checked');
if (cur_checked == original_checked) { if (cur_checked == original_checked) {
return false; return false;
} }
Common.ajaxPost({
form: form, var submit_btn = form.children('[type="submit"]');
form_id: form.attr('id'), Common.disableButton(submit_btn);
post_url: Common.getUrl({
'name': 'toggle_personal_modules' var ajax_type = '';
}), if (cur_checked) {
post_data: {'personal_wiki': cur_checked }, ajax_type = 'POST';
after_op_success: function () { } else {
ajax_type = 'DELETE';
}
$.ajax({
url: Common.getUrl({'name': 'user_enabled_modules'}),
type: ajax_type,
cache: false,
dataType: 'json',
beforeSend: Common.prepareCSRFToken,
success: function() {
if (cur_checked) { if (cur_checked) {
mods_enabled.push('personal wiki'); mods_enabled.push('personal wiki');
} else { } else {
@ -116,12 +127,14 @@ define([
} }
$.modal.close(); $.modal.close();
_this.render(); _this.render();
},
error: function(xhr) {
Common.ajaxErrorHandler(xhr);
} }
}); });
return false;
});
return false; return false;
});
}, },
setCurTab: function(cur_tab, options) { setCurTab: function(cur_tab, options) {

View File

@ -159,8 +159,8 @@ define([
case 'notifications': return siteRoot + 'api/v2.1/notifications/'; case 'notifications': return siteRoot + 'api/v2.1/notifications/';
case 'notification': return siteRoot + 'api/v2.1/notification/'; case 'notification': return siteRoot + 'api/v2.1/notification/';
case 'user_enabled_modules': return siteRoot + 'api/v2.1/user-enabled-modules/';
case 'toggle_personal_modules': return siteRoot + 'ajax/toggle-personal-modules/';
case 'starred_files': return siteRoot + 'api2/starredfiles/'; case 'starred_files': return siteRoot + 'api2/starredfiles/';
case 'events': return siteRoot + 'api2/events/'; case 'events': return siteRoot + 'api2/events/';
case 'devices': return siteRoot + 'api2/devices/'; case 'devices': return siteRoot + 'api2/devices/';

View File

@ -0,0 +1,41 @@
from seahub.test_utils import BaseTestCase
from seahub.views.modules import enable_mod_for_user, \
get_enabled_mods_by_user, MOD_PERSONAL_WIKI
class UserEnabledModulesTest(BaseTestCase):
def setUp(self):
self.url = '/api/v2.1/user-enabled-modules/'
self.username = self.user.username
def test_can_enable_personal_wiki_module(self):
enabled_mods = get_enabled_mods_by_user(self.username)
assert 'personal wiki' not in enabled_mods
self.login_as(self.user)
resp = self.client.post(self.url, {})
self.assertEqual(200, resp.status_code)
enabled_mods = get_enabled_mods_by_user(self.username)
assert 'personal wiki' in enabled_mods
def test_enable_module_with_invalid_user_permission(self):
resp = self.client.post(self.url, {})
self.assertEqual(403, resp.status_code)
def test_can_disable_personal_wiki_module(self):
enable_mod_for_user(self.username, MOD_PERSONAL_WIKI)
enabled_mods = get_enabled_mods_by_user(self.username)
assert 'personal wiki' in enabled_mods
self.login_as(self.user)
resp = self.client.delete(self.url, {}, 'application/x-www-form-urlencoded')
self.assertEqual(200, resp.status_code)
enabled_mods = get_enabled_mods_by_user(self.username)
assert 'personal wiki' not in enabled_mods
def test_disable_module_with_invalid_user_permission(self):
resp = self.client.post(self.url, {})
self.assertEqual(403, resp.status_code)