Browse Source

Moved forums perms admin from acl to forums app

Rafał Pitoń 11 years ago
parent
commit
5cb61135f2

+ 5 - 15
misago/acl/adminurls.py

@@ -1,6 +1,6 @@
 from django.conf.urls import url
 from misago.admin import urlpatterns
-from misago.acl.views import roles, forumroles
+from misago.acl.views import RolesList, NewRole, EditRole, DeleteRole
 
 
 # Users section
@@ -10,18 +10,8 @@ urlpatterns.namespace(r'^permissions/', 'permissions')
 # Roles
 urlpatterns.namespace(r'^users/', 'users', 'permissions')
 urlpatterns.patterns('permissions:users',
-    url(r'^$', roles.RolesList.as_view(), name='index'),
-    url(r'^new/$', roles.NewRole.as_view(), name='new'),
-    url(r'^edit/(?P<role_id>\d+)/$', roles.EditRole.as_view(), name='edit'),
-    url(r'^delete/(?P<role_id>\d+)/$', roles.DeleteRole.as_view(), name='delete'),
-)
-
-
-# Forum Roles
-urlpatterns.namespace(r'^forums/', 'forums', 'permissions')
-urlpatterns.patterns('permissions:forums',
-    url(r'^$', forumroles.ForumRolesList.as_view(), name='index'),
-    url(r'^new/$', forumroles.NewForumRole.as_view(), name='new'),
-    url(r'^edit/(?P<role_id>\d+)/$', forumroles.EditForumRole.as_view(), name='edit'),
-    url(r'^delete/(?P<role_id>\d+)/$', forumroles.DeleteForumRole.as_view(), name='delete'),
+    url(r'^$', RolesList.as_view(), name='index'),
+    url(r'^new/$', NewRole.as_view(), name='new'),
+    url(r'^edit/(?P<role_id>\d+)/$', EditRole.as_view(), name='edit'),
+    url(r'^delete/(?P<role_id>\d+)/$', DeleteRole.as_view(), name='delete'),
 )

+ 1 - 8
misago/acl/forms.py

@@ -1,6 +1,6 @@
 from django.utils.translation import ugettext_lazy as _
 from misago.core import forms
-from misago.acl.models import Role, ForumRole
+from misago.acl.models import Role
 
 
 class RoleForm(forms.ModelForm):
@@ -10,10 +10,3 @@ class RoleForm(forms.ModelForm):
         model = Role
         fields = ['name']
 
-
-class ForumRoleForm(forms.ModelForm):
-    name = forms.CharField(label=_("Role name"))
-
-    class Meta:
-        model = ForumRole
-        fields = ['name']

+ 34 - 0
misago/acl/migrations/0003_auto__del_forumrole.py

@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+from south.utils import datetime_utils as datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        # Deleting model 'ForumRole'
+        db.delete_table(u'acl_forumrole')
+
+
+    def backwards(self, orm):
+        # Adding model 'ForumRole'
+        db.create_table(u'acl_forumrole', (
+            ('pickled_permissions', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('name', self.gf('django.db.models.fields.CharField')(max_length=255)),
+        ))
+        db.send_create_signal(u'acl', ['ForumRole'])
+
+
+    models = {
+        u'acl.role': {
+            'Meta': {'object_name': 'Role'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'pickled_permissions': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+        }
+    }
+
+    complete_apps = ['acl']

+ 0 - 11
misago/acl/models.py

@@ -51,10 +51,6 @@ class Role(BaseRole):
     pass
 
 
-class ForumRole(BaseRole):
-    pass
-
-
 """register models in misago admin"""
 site.add_node(
     parent='misago:admin',
@@ -70,10 +66,3 @@ site.add_node(
     link='misago:admin:permissions:users:index',
     name=_("User Roles"),
     icon='fa fa-th-large')
-
-site.add_node(
-    parent='misago:admin:permissions',
-    namespace='misago:admin:permissions:forums',
-    link='misago:admin:permissions:forums:index',
-    name=_("Forum Roles"),
-    icon='fa fa-list')

+ 0 - 16
misago/acl/providers.py

@@ -35,22 +35,6 @@ class PermissionProviders(object):
 providers = PermissionProviders()
 
 
-def get_default_permissions():
-    default_permissions = {}
-
-    for provider, module in providers.list():
-        try:
-            default_data = module.DEFAULT_PERMISSIONS
-        except AttributeError:
-            message = "'%s' object has no attribute '%s'"
-            raise AttributeError(
-                message % (provider, 'DEFAULT_PERMISSIONS'))
-
-        default_permissions[provider] = default_data
-
-    return default_permissions
-
-
 def get_change_permissions_forms(role, data=None):
     role_permissions = role.permissions
 

+ 1 - 7
misago/acl/tests/test_testutils.py

@@ -1,5 +1,5 @@
 from django.test import TestCase
-from misago.acl.models import Role, ForumRole
+from misago.acl.models import Role
 from misago.acl.testutils import fake_post_data
 
 
@@ -9,9 +9,3 @@ class FakeTestDataTests(TestCase):
         test_data = fake_post_data(Role(), {'can_fly': 1})
 
         self.assertIn('can_fly', test_data)
-
-    def test_fake_post_data_for_forumrole(self):
-        """fake data was created for ForumRole"""
-        test_data = fake_post_data(ForumRole(), {'can_swim': 1})
-
-        self.assertIn('can_swim', test_data)

+ 1 - 1
misago/acl/views/roles.py → misago/acl/views.py

@@ -3,8 +3,8 @@ from django.shortcuts import redirect
 from django.utils.translation import ugettext_lazy as _
 from misago.admin.views import generic
 from misago.acl import get_change_permissions_forms
-from misago.acl.models import Role
 from misago.acl.forms import RoleForm
+from misago.acl.models import Role
 
 
 class RoleAdmin(generic.AdminBaseMixin):

+ 11 - 0
misago/admin/views/generic.py

@@ -74,6 +74,17 @@ class ListView(AdminView):
     items_per_page = 0
     ordering = None
 
+    extra_actions = []
+
+    @classmethod
+    def add_item_action(cls, name, icon, link, style='default'):
+        cls.extra_actions.append({
+            'name': name,
+            'icon': icon,
+            'link': link,
+            'style': style,
+            })
+
     def get_queryset(self):
         return self.get_model().objects.all()
 

+ 9 - 1
misago/forums/forms.py

@@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _
 from mptt.forms import TreeNodeChoiceField as TreeNodeChoiceField
 from misago.core import forms
 from misago.core.validators import validate_sluggable
-from misago.forums.models import Forum
+from misago.forums.models import Forum, ForumRole
 
 
 class ForumChoiceField(TreeNodeChoiceField):
@@ -210,3 +210,11 @@ def DeleteFormFactory(instance):
             required=False)
 
     return type('DeleteForumFormFinal', (DeleteForumFormBase,), fields)
+
+
+class ForumRoleForm(forms.ModelForm):
+    name = forms.CharField(label=_("Role name"))
+
+    class Meta:
+        model = ForumRole
+        fields = ['name']

+ 85 - 0
misago/forums/migrations/0004_auto__add_forumrole__add_roleforumacl.py

@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+from south.utils import datetime_utils as datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        # Adding model 'ForumRole'
+        db.create_table(u'forums_forumrole', (
+            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('name', self.gf('django.db.models.fields.CharField')(max_length=255)),
+            ('pickled_permissions', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+        ))
+        db.send_create_signal(u'forums', ['ForumRole'])
+
+        # Adding model 'RoleForumACL'
+        db.create_table(u'forums_roleforumacl', (
+            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('role', self.gf('mptt.fields.TreeForeignKey')(to=orm['acl.Role'])),
+            ('forum', self.gf('mptt.fields.TreeForeignKey')(to=orm['forums.Forum'])),
+            ('forum_role', self.gf('mptt.fields.TreeForeignKey')(to=orm['forums.ForumRole'])),
+        ))
+        db.send_create_signal(u'forums', ['RoleForumACL'])
+
+
+    def backwards(self, orm):
+        # Deleting model 'ForumRole'
+        db.delete_table(u'forums_forumrole')
+
+        # Deleting model 'RoleForumACL'
+        db.delete_table(u'forums_roleforumacl')
+
+
+    models = {
+        u'acl.role': {
+            'Meta': {'object_name': 'Role'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'pickled_permissions': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+        },
+        u'forums.forum': {
+            'Meta': {'object_name': 'Forum'},
+            'archive_pruned_in': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'pruned_archive'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['forums.Forum']"}),
+            'css_class': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'description_as_html': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            u'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+            u'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'parent': ('mptt.fields.TreeForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': u"orm['forums.Forum']"}),
+            'posts': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+            'posts_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+            'prune_replied_after': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+            'prune_started_after': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+            'redirect_url': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'redirects_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+            u'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+            'role': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '255'}),
+            'special_role': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'threads': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+            'threads_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+            u'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
+        },
+        u'forums.forumrole': {
+            'Meta': {'object_name': 'ForumRole'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'pickled_permissions': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+        },
+        u'forums.roleforumacl': {
+            'Meta': {'object_name': 'RoleForumACL'},
+            'forum': ('mptt.fields.TreeForeignKey', [], {'to': u"orm['forums.Forum']"}),
+            'forum_role': ('mptt.fields.TreeForeignKey', [], {'to': u"orm['forums.ForumRole']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'role': ('mptt.fields.TreeForeignKey', [], {'to': u"orm['acl.Role']"})
+        }
+    }
+
+    complete_apps = ['forums']

+ 19 - 0
misago/forums/models.py

@@ -2,6 +2,7 @@ from django.db import models
 from django.utils.translation import ugettext_lazy as _
 from mptt.managers import TreeManager
 from mptt.models import MPTTModel, TreeForeignKey
+from misago.acl.models import BaseRole
 from misago.admin import site
 from misago.core.utils import subset_markdown, slugify
 
@@ -71,6 +72,16 @@ class Forum(MPTTModel):
         return child.lft > self.lft and child.rght < self.rght
 
 
+class ForumRole(BaseRole):
+    pass
+
+
+class RoleForumACL(models.Model):
+    role = TreeForeignKey('acl.Role')
+    forum = TreeForeignKey('Forum')
+    forum_role = TreeForeignKey(ForumRole)
+
+
 """register model in misago admin"""
 site.add_node(
     parent='misago:admin',
@@ -86,3 +97,11 @@ site.add_node(
     link='misago:admin:forums:nodes:index',
     name=_("Forums Hierarchy"),
     icon='fa fa-comment')
+
+site.add_node(
+    parent='misago:admin:permissions',
+    namespace='misago:admin:permissions:forums',
+    after='misago:admin:permissions:users:index',
+    link='misago:admin:permissions:forums:index',
+    name=_("Forum Roles"),
+    icon='fa fa-list')

+ 1 - 1
misago/forums/permissions.py

@@ -1,6 +1,6 @@
 from django.utils.translation import ugettext_lazy as _
-from misago.acl.models import ForumRole
 from misago.core import forms
+from misago.forums.models import ForumRole
 
 
 DEFAULT_PERMISSIONS = {

+ 2 - 2
misago/acl/tests/test_forumroleadmin_views.py → misago/forums/tests/test_forumroleadmin_views.py

@@ -1,8 +1,8 @@
 from django.core.urlresolvers import reverse
 from misago.acl import get_change_permissions_forms
-from misago.admin.testutils import AdminTestCase
-from misago.acl.models import ForumRole
 from misago.acl.testutils import fake_post_data
+from misago.admin.testutils import AdminTestCase
+from misago.forums.models import ForumRole
 
 
 def fake_data(data_dict):

+ 14 - 2
misago/forums/urls.py

@@ -1,7 +1,10 @@
 from django.conf.urls import url
 from misago.admin import urlpatterns
-from misago.forums.views import (ForumsList, NewForum, EditForum, DeleteForum,
-                                 MoveUpForum, MoveDownForum)
+from misago.forums.views.forums import (ForumsList, NewForum, EditForum,
+                                        DeleteForum, MoveUpForum,
+                                        MoveDownForum)
+from misago.forums.views.roles import (ForumRolesList, NewForumRole,
+                                       EditForumRole, DeleteForumRole)
 
 
 # Forums section
@@ -18,3 +21,12 @@ urlpatterns.patterns('forums:nodes',
     url(r'^move/down/(?P<forum_id>\d+)/$', MoveDownForum.as_view(), name='down'),
     url(r'^delete/(?P<forum_id>\d+)/$', DeleteForum.as_view(), name='delete'),
 )
+
+# Forum Roles
+urlpatterns.namespace(r'^forums/', 'forums', 'permissions')
+urlpatterns.patterns('permissions:forums',
+    url(r'^$', ForumRolesList.as_view(), name='index'),
+    url(r'^new/$', NewForumRole.as_view(), name='new'),
+    url(r'^edit/(?P<role_id>\d+)/$', EditForumRole.as_view(), name='edit'),
+    url(r'^delete/(?P<role_id>\d+)/$', DeleteForumRole.as_view(), name='delete'),
+)

+ 0 - 0
misago/acl/views/__init__.py → misago/forums/views/__init__.py


+ 0 - 0
misago/forums/views.py → misago/forums/views/forums.py


+ 2 - 2
misago/acl/views/forumroles.py → misago/forums/views/roles.py

@@ -3,8 +3,8 @@ from django.shortcuts import redirect
 from django.utils.translation import ugettext_lazy as _
 from misago.admin.views import generic
 from misago.acl import get_change_permissions_forms
-from misago.acl.models import ForumRole
-from misago.acl.forms import ForumRoleForm
+from misago.forums.forms import ForumRoleForm
+from misago.forums.models import ForumRole
 
 
 class ForumRoleAdmin(generic.AdminBaseMixin):