1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-02 07:47:32 +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.invitation import InvitationView
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.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+)/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/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/upload-file-done/$', upload_file_done, name='upload_file_done'),
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/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/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/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 }),
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
def ajax_group_members_import(request, group_id):
"""Import users to group.

View File

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

View File

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

View File

@ -159,8 +159,8 @@ define([
case 'notifications': return siteRoot + 'api/v2.1/notifications/';
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 'events': return siteRoot + 'api2/events/';
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)