From 41be20a0008dc62d35d09c5b94bebd6273c99e1e Mon Sep 17 00:00:00 2001 From: Chris Dodge Date: Thu, 12 Sep 2013 12:31:00 -0400 Subject: [PATCH] define a unseeding forums permissions and call into it from delete_course define a unseeding forums permissions and call into it from delete_course define a unseeding forums permissions and call into it from delete_course --- .../management/commands/delete_course.py | 4 ++++ .../contentstore/tests/test_contentstore.py | 8 +++++++ .../djangoapps/django_comment_common/utils.py | 24 +++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/cms/djangoapps/contentstore/management/commands/delete_course.py b/cms/djangoapps/contentstore/management/commands/delete_course.py index 50f9b82e80..f97cdf5130 100644 --- a/cms/djangoapps/contentstore/management/commands/delete_course.py +++ b/cms/djangoapps/contentstore/management/commands/delete_course.py @@ -7,6 +7,7 @@ from xmodule.modulestore.django import modulestore from xmodule.contentstore.django import contentstore from xmodule.course_module import CourseDescriptor from .prompt import query_yes_no +from django_comment_common.utils import unseed_permissions_roles from auth.authz import _delete_course_group @@ -40,6 +41,9 @@ class Command(BaseCommand): if query_yes_no("Are you sure. This action cannot be undone!", default="no"): loc = CourseDescriptor.id_to_location(course_id) if delete_course(ms, cs, loc, commit): + print 'removing forums permissions and roles...' + unseed_permissions_roles(course_id) + print 'removing User permissions from course....' # in the django layer, we need to remove all the user permissions groups associated with this course if commit: diff --git a/cms/djangoapps/contentstore/tests/test_contentstore.py b/cms/djangoapps/contentstore/tests/test_contentstore.py index c4f5f4ee61..b4f35bb19a 100644 --- a/cms/djangoapps/contentstore/tests/test_contentstore.py +++ b/cms/djangoapps/contentstore/tests/test_contentstore.py @@ -55,6 +55,8 @@ from uuid import uuid4 from pymongo import MongoClient from student.models import CourseEnrollment +from django_comment_common.utils import unseed_permissions_roles + TEST_DATA_CONTENTSTORE = copy.deepcopy(settings.CONTENTSTORE) TEST_DATA_CONTENTSTORE['OPTIONS']['db'] = 'test_xcontent_%s' % uuid4().hex @@ -1292,6 +1294,12 @@ class ContentStoreTest(ModuleStoreTestCase): test_course_data = self.assert_created_course(number_suffix=uuid4().hex) self.assertTrue(are_permissions_roles_seeded(self._get_course_id(test_course_data))) + def test_forum_unseeding(self): + """Test new course creation and verify forum seeding """ + test_course_data = self.assert_created_course(number_suffix=uuid4().hex) + unseed_permissions_roles(self._get_course_id(test_course_data)) + self.assertFalse(are_permissions_roles_seeded(self._get_course_id(test_course_data))) + def _get_course_id(self, test_course_data): """Returns the course ID (org/number/run).""" return "{org}/{number}/{run}".format(**test_course_data) diff --git a/common/djangoapps/django_comment_common/utils.py b/common/djangoapps/django_comment_common/utils.py index f74116d59f..b4c3f7ae29 100644 --- a/common/djangoapps/django_comment_common/utils.py +++ b/common/djangoapps/django_comment_common/utils.py @@ -32,6 +32,30 @@ def seed_permissions_roles(course_id): administrator_role.inherit_permissions(moderator_role) +def unseed_permissions_roles(course_id): + """ + A utility method to clean up all forum related permissions and roles + """ + administrator_role = Role.objects.get_or_create(name="Administrator", course_id=course_id)[0] + moderator_role = Role.objects.get_or_create(name="Moderator", course_id=course_id)[0] + community_ta_role = Role.objects.get_or_create(name="Community TA", course_id=course_id)[0] + student_role = Role.objects.get_or_create(name="Student", course_id=course_id)[0] + + # safety switches in case the casing does not match + + if administrator_role.course_id == course_id: + administrator_role.delete() + + if moderator_role.course_id == course_id: + moderator_role.delete() + + if community_ta_role.course_id == course_id: + community_ta_role.delete() + + if student_role.course_id == course_id: + student_role.delete() + + def are_permissions_roles_seeded(course_id): try: