Ejemplo n.º 1
0
    def handle_form(self, form, request, target):
        if form.instance.pk:
            if form.instance.parent_id != form.cleaned_data['new_parent'].pk:
                form.instance.move_to(
                    form.cleaned_data['new_parent'], position='last-child')
            form.instance.save()
            if form.instance.parent_id != form.cleaned_data['new_parent'].pk:
                Category.objects.clear_cache()
        else:
            form.instance.insert_at(form.cleaned_data['new_parent'],
                position='last-child',
                save=True,
            )
            Category.objects.clear_cache()

        if form.cleaned_data.get('copy_permissions'):
            form.instance.category_role_set.all().delete()
            copy_from = form.cleaned_data['copy_permissions']

            copied_acls = []
            for acl in copy_from.category_role_set.all():
                copied_acls.append(RoleCategoryACL(
                    role_id=acl.role_id,
                    category=form.instance,
                    category_role_id=acl.category_role_id,
                ))

            if copied_acls:
                RoleCategoryACL.objects.bulk_create(copied_acls)

        acl_version.invalidate()
        messages.success(request, self.message_submit % {'name': target.name})
Ejemplo n.º 2
0
    def handle_form(self, form, request, target):
        if form.instance.pk:
            if form.instance.parent_id != form.cleaned_data['new_parent'].pk:
                form.instance.move_to(form.cleaned_data['new_parent'],
                                      position='last-child')
            form.instance.save()
            if form.instance.parent_id != form.cleaned_data['new_parent'].pk:
                Forum.objects.clear_cache()
        else:
            form.instance.insert_at(form.cleaned_data['new_parent'],
                                    position='last-child',
                                    save=True)
            Forum.objects.clear_cache()

        if form.cleaned_data.get('copy_permissions'):
            form.instance.forum_role_set.all().delete()
            copy_from = form.cleaned_data['copy_permissions']

            copied_acls = []
            for acl in copy_from.forum_role_set.all():
                copied_acls.append(
                    RoleForumACL(role_id=acl.role_id,
                                 forum=form.instance,
                                 forum_role_id=acl.forum_role_id))

            if copied_acls:
                RoleForumACL.objects.bulk_create(copied_acls)

        acl_version.invalidate()
        messages.success(request, self.message_submit % {'name': target.name})
Ejemplo n.º 3
0
    def handle(self, *args, **options):
        items_to_create = options['categories']
        min_level = options['minlevel']

        categories = Category.objects.all_categories(True)

        copy_acl_from = list(Category.objects.all_categories())[0]

        categories = categories.filter(level__gte=min_level)
        fake = Factory.create()

        message = 'Creating %s fake categories...\n'
        self.stdout.write(message % items_to_create)

        message = '\n\nSuccessfully created %s fake categories in %s'

        created_count = 0
        start_time = time.time()
        show_progress(self, created_count, items_to_create)

        while created_count < items_to_create:
            parent = random.choice(categories)

            new_category = Category()
            if random.randint(1, 100) > 75:
                new_category.set_name(fake.catch_phrase().title())
            else:
                new_category.set_name(fake.street_name())

            if random.randint(1, 100) > 50:
                if random.randint(1, 100) > 80:
                    new_category.description = '\r\n'.join(fake.paragraphs())
                else:
                    new_category.description = fake.paragraph()

            new_category.insert_at(parent,
                position='last-child',
                save=True,
            )

            copied_acls = []
            for acl in copy_acl_from.category_role_set.all():
                copied_acls.append(RoleCategoryACL(
                    role_id=acl.role_id,
                    category=new_category,
                    category_role_id=acl.category_role_id,
                ))

            if copied_acls:
                RoleCategoryACL.objects.bulk_create(copied_acls)

            created_count += 1
            show_progress(
                self, created_count, items_to_create, start_time)

        acl_version.invalidate()

        total_time = time.time() - start_time
        total_humanized = time.strftime('%H:%M:%S', time.gmtime(total_time))
        self.stdout.write(message % (created_count, total_humanized))
Ejemplo n.º 4
0
    def handle_form(self, form, request, target):
        if form.instance.pk:
            if form.instance.parent_id != form.cleaned_data["new_parent"].pk:
                form.instance.move_to(form.cleaned_data["new_parent"], position="last-child")
            form.instance.save()
            if form.instance.parent_id != form.cleaned_data["new_parent"].pk:
                Forum.objects.clear_cache()
        else:
            form.instance.insert_at(form.cleaned_data["new_parent"], position="last-child", save=True)
            Forum.objects.clear_cache()

        if form.cleaned_data.get("copy_permissions"):
            form.instance.forum_role_set.all().delete()
            copy_from = form.cleaned_data["copy_permissions"]

            copied_acls = []
            for acl in copy_from.forum_role_set.all():
                copied_acls.append(
                    RoleForumACL(role_id=acl.role_id, forum=form.instance, forum_role_id=acl.forum_role_id)
                )

            if copied_acls:
                RoleForumACL.objects.bulk_create(copied_acls)

            acl_version.invalidate()

        messages.success(request, self.message_submit % target.name)
    def handle(self, *args, **options):
        root = Category.objects.root_category()
        Category.objects.partial_rebuild(root.tree_id)
        self.stdout.write("Categories tree has been rebuild.")

        Category.objects.clear_cache()
        acl_version.invalidate()
        self.stdout.write("Caches have been cleared.")
Ejemplo n.º 6
0
    def real_dispatch(self, request, target):
        forums = Forum.objects.all_forums()
        roles = ForumRole.objects.order_by('name')

        if not forums:
            messages.info(request, _("No forums exist."))
            return redirect(self.root_link)

        choices = {}
        for choice in target.forums_acls.select_related('forum_role'):
            choices[choice.forum_id] = choice.forum_role

        forms = []
        forms_are_valid = True
        for forum in forums:
            forum.level_range = range(forum.level - 1)
            FormType = RoleForumACLFormFactory(forum,
                                               roles,
                                               choices.get(forum.pk))

            if request.method == 'POST':
                forms.append(FormType(request.POST, prefix=forum.pk))
                if not forms[-1].is_valid():
                    forms_are_valid = False
            else:
                forms.append(FormType(prefix=forum.pk))

        if request.method == 'POST' and forms_are_valid:
            target.forums_acls.all().delete()
            new_permissions = []
            for form in forms:
                if form.cleaned_data['role']:
                    new_permissions.append(
                        RoleForumACL(role=target,
                                     forum=form.forum,
                                     forum_role=form.cleaned_data['role']))
            if new_permissions:
                RoleForumACL.objects.bulk_create(new_permissions)

            acl_version.invalidate()

            message = _("Forum permissions for role "
                        "%(name)s have been changed.")
            messages.success(request, message % {'name': target.name})
            if 'stay' in request.POST:
                return redirect(request.path)
            else:
                return redirect(self.root_link)

        return self.render(
            request,
            {
                'forms': forms,
                'target': target,
            })
Ejemplo n.º 7
0
    def real_dispatch(self, request, target):
        categories = Category.objects.all_categories()
        roles = CategoryRole.objects.order_by('name')

        if not categories:
            messages.info(request, _("No categories exist."))
            return redirect(self.root_link)

        choices = {}
        for choice in target.categories_acls.select_related('category_role'):
            choices[choice.category_id] = choice.category_role

        forms = []
        forms_are_valid = True
        for category in categories:
            category.level_range = list(range(category.level - 1))
            FormType = RoleCategoryACLFormFactory(category, roles,
                                                  choices.get(category.pk))

            if request.method == 'POST':
                forms.append(FormType(request.POST, prefix=category.pk))
                if not forms[-1].is_valid():
                    forms_are_valid = False
            else:
                forms.append(FormType(prefix=category.pk))

        if request.method == 'POST' and forms_are_valid:
            target.categories_acls.all().delete()
            new_permissions = []
            for form in forms:
                if form.cleaned_data['role']:
                    new_permissions.append(
                        RoleCategoryACL(
                            role=target,
                            category=form.category,
                            category_role=form.cleaned_data['role'],
                        ))
            if new_permissions:
                RoleCategoryACL.objects.bulk_create(new_permissions)

            acl_version.invalidate()

            message = _(
                "Category permissions for role %(name)s have been changed.")
            messages.success(request, message % {'name': target.name})
            if 'stay' in request.POST:
                return redirect(request.path)
            else:
                return redirect(self.root_link)

        return self.render(request, {
            'forms': forms,
            'target': target,
        })
Ejemplo n.º 8
0
    def real_dispatch(self, request, target):
        forums = Forum.objects.all_forums()
        roles = ForumRole.objects.order_by('name')

        if not forums:
            messages.info(request, _("No forums exist."))
            return redirect(self.root_link)

        choices = {}
        for choice in target.forums_acls.select_related('forum_role'):
            choices[choice.forum_id] = choice.forum_role

        forms = []
        forms_are_valid = True
        for forum in forums:
            forum.level_range = range(forum.level - 1)
            FormType = RoleForumACLFormFactory(forum, roles,
                                               choices.get(forum.pk))

            if request.method == 'POST':
                forms.append(FormType(request.POST, prefix=forum.pk))
                if not forms[-1].is_valid():
                    forms_are_valid = False
            else:
                forms.append(FormType(prefix=forum.pk))

        if request.method == 'POST' and forms_are_valid:
            target.forums_acls.all().delete()
            new_permissions = []
            for form in forms:
                if form.cleaned_data['role']:
                    new_permissions.append(
                        RoleForumACL(role=target,
                                     forum=form.forum,
                                     forum_role=form.cleaned_data['role']))
            if new_permissions:
                RoleForumACL.objects.bulk_create(new_permissions)

            acl_version.invalidate()

            message = _("Forum permissions for role %s have been changed.")
            messages.success(request, message % target)
            if 'stay' in request.POST:
                return redirect(request.path)
            else:
                return redirect(self.root_link)

        return self.render(request, {
            'forms': forms,
            'target': target,
        })
Ejemplo n.º 9
0
    def real_dispatch(self, request, target):
        forum_roles = ForumRole.objects.order_by('name')

        assigned_roles = {}
        for acl in target.forum_role_set.select_related('forum_role'):
            assigned_roles[acl.role_id] = acl.forum_role

        forms = []
        forms_are_valid = True
        for role in Role.objects.order_by('name'):
            FormType = ForumRolesACLFormFactory(role,
                                                forum_roles,
                                                assigned_roles.get(role.pk))

            if request.method == 'POST':
                forms.append(FormType(request.POST, prefix=role.pk))
                if not forms[-1].is_valid():
                    forms_are_valid = False
            else:
                forms.append(FormType(prefix=role.pk))

        if request.method == 'POST' and forms_are_valid:
            target.forum_role_set.all().delete()
            new_permissions = []
            for form in forms:
                if form.cleaned_data['forum_role']:
                    new_permissions.append(
                        RoleForumACL(
                            role=form.role,
                            forum=target,
                            forum_role=form.cleaned_data['forum_role']
                        ))
            if new_permissions:
                RoleForumACL.objects.bulk_create(new_permissions)

            acl_version.invalidate()

            message = _("Forum %(name)s permissions have been changed.")
            messages.success(request, message % {'name': target.name})
            if 'stay' in request.POST:
                return redirect(request.path)
            else:
                return redirect(self.root_link)

        return self.render(
            request,
            {
                'forms': forms,
                'target': target,
            })
Ejemplo n.º 10
0
    def real_dispatch(self, request, target):
        category_roles = CategoryRole.objects.order_by('name')

        assigned_roles = {}
        for acl in target.category_role_set.select_related('category_role'):
            assigned_roles[acl.role_id] = acl.category_role

        forms = []
        forms_are_valid = True
        for role in Role.objects.order_by('name'):
            FormType = CategoryRolesACLFormFactory(role, category_roles,
                                                   assigned_roles.get(role.pk))

            if request.method == 'POST':
                forms.append(FormType(request.POST, prefix=role.pk))
                if not forms[-1].is_valid():
                    forms_are_valid = False
            else:
                forms.append(FormType(prefix=role.pk))

        if request.method == 'POST' and forms_are_valid:
            target.category_role_set.all().delete()
            new_permissions = []
            for form in forms:
                if form.cleaned_data['category_role']:
                    new_permissions.append(
                        RoleCategoryACL(
                            role=form.role,
                            category=target,
                            category_role=form.cleaned_data['category_role'],
                        ))
            if new_permissions:
                RoleCategoryACL.objects.bulk_create(new_permissions)

            acl_version.invalidate()

            message = _("Category %(name)s permissions have been changed.")
            messages.success(request, message % {'name': target.name})
            if 'stay' in request.POST:
                return redirect(request.path)
            else:
                return redirect(self.root_link)

        return self.render(request, {
            'forms': forms,
            'target': target,
        })
Ejemplo n.º 11
0
 def delete(self, *args, **kwargs):
     Category.objects.clear_cache()
     acl_version.invalidate()
     return super(Category, self).delete(*args, **kwargs)
Ejemplo n.º 12
0
 def delete(self, *args, **kwargs):
     acl_version.invalidate()
     return super(Rank, self).delete(*args, **kwargs)
Ejemplo n.º 13
0
 def save(self, *args, **kwargs):
     if not self.pk:
         self.set_order()
     else:
         acl_version.invalidate()
     return super(Rank, self).save(*args, **kwargs)
Ejemplo n.º 14
0
 def delete(self, *args, **kwargs):
     Forum.objects.clear_cache()
     acl_version.invalidate()
     return super(Forum, self).delete(*args, **kwargs)
Ejemplo n.º 15
0
 def delete(self, *args, **kwargs):
     Category.objects.clear_cache()
     acl_version.invalidate()
     return super(Category, self).delete(*args, **kwargs)
Ejemplo n.º 16
0
 def delete(self, *args, **kwargs):
     acl_version.invalidate()
     return super(BaseRole, self).delete(*args, **kwargs)
Ejemplo n.º 17
0
 def save(self, *args, **kwargs):
     if self.pk:
         acl_version.invalidate()
     return super(BaseRole, self).save(*args, **kwargs)
Ejemplo n.º 18
0
 def save(self, *args, **kwargs):
     if not self.pk:
         self.set_order()
     else:
         acl_version.invalidate()
     return super(Rank, self).save(*args, **kwargs)
Ejemplo n.º 19
0
 def save(self, *args, **kwargs):
     if self.pk:
         acl_version.invalidate()
     return super(BaseRole, self).save(*args, **kwargs)
Ejemplo n.º 20
0
    def handle(self, *args, **options):
        try:
            fake_cats_to_create = int(args[0])
        except IndexError:
            fake_cats_to_create = 5
        except ValueError:
            self.stderr.write("\nOptional argument should be integer.")
            sys.exit(1)

        categories = Category.objects.all_categories(True)

        try:
            min_level = int(args[1])
        except (IndexError):
            min_level = 0
        except ValueError:
            self.stderr.write("\nSecond optional argument should be integer.")
            sys.exit(1)

        copy_acl_from = list(Category.objects.all_categories())[0]

        categories = categories.filter(level__gte=min_level)
        fake = Factory.create()

        message = 'Creating %s fake categories...\n'
        self.stdout.write(message % fake_cats_to_create)

        message = '\n\nSuccessfully created %s fake categories in %s'

        created_count = 0
        start_time = time.time()
        show_progress(self, created_count, fake_cats_to_create)
        for i in range(fake_cats_to_create):
            parent = random.choice(categories)

            new_category = Category()
            if random.randint(1, 100) > 75:
                new_category.set_name(fake.catch_phrase().title())
            else:
                new_category.set_name(fake.street_name())

            if random.randint(1, 100) > 50:
                if random.randint(1, 100) > 80:
                    new_category.description = '\r\n'.join(fake.paragraphs())
                else:
                    new_category.description = fake.paragraph()

            new_category.insert_at(parent,
                position='last-child',
                save=True,
            )

            copied_acls = []
            for acl in copy_acl_from.category_role_set.all():
                copied_acls.append(RoleCategoryACL(
                    role_id=acl.role_id,
                    category=new_category,
                    category_role_id=acl.category_role_id,
                ))

            if copied_acls:
                RoleCategoryACL.objects.bulk_create(copied_acls)

            created_count += 1
            show_progress(
                self, created_count, fake_cats_to_create, start_time)

        acl_version.invalidate()

        total_time = time.time() - start_time
        total_humanized = time.strftime('%H:%M:%S', time.gmtime(total_time))
        self.stdout.write(message % (created_count, total_humanized))
Ejemplo n.º 21
0
    def handle(self, *args, **options):
        try:
            fake_cats_to_create = int(args[0])
        except IndexError:
            fake_cats_to_create = 5
        except ValueError:
            self.stderr.write("\nOptional argument should be integer.")
            sys.exit(1)

        categories = Category.objects.all_categories(True)

        try:
            min_level = int(args[1])
        except (IndexError):
            min_level = 0
        except ValueError:
            self.stderr.write("\nSecond optional argument should be integer.")
            sys.exit(1)

        copy_acl_from = list(Category.objects.all_categories())[0]

        categories = categories.filter(level__gte=min_level)
        fake = Factory.create()

        message = 'Creating %s fake categories...\n'
        self.stdout.write(message % fake_cats_to_create)

        message = '\n\nSuccessfully created %s fake categories in %s'

        created_count = 0
        start_time = time.time()
        show_progress(self, created_count, fake_cats_to_create)
        for i in xrange(fake_cats_to_create):
            parent = random.choice(categories)

            new_category = Category()
            if random.randint(1, 100) > 75:
                new_category.set_name(fake.catch_phrase().title())
            else:
                new_category.set_name(fake.street_name())

            if random.randint(1, 100) > 50:
                if random.randint(1, 100) > 80:
                    new_category.description = '\r\n'.join(fake.paragraphs())
                else:
                    new_category.description = fake.paragraph()

            new_category.insert_at(
                parent,
                position='last-child',
                save=True,
            )

            copied_acls = []
            for acl in copy_acl_from.category_role_set.all():
                copied_acls.append(
                    RoleCategoryACL(
                        role_id=acl.role_id,
                        category=new_category,
                        category_role_id=acl.category_role_id,
                    ))

            if copied_acls:
                RoleCategoryACL.objects.bulk_create(copied_acls)

            created_count += 1
            show_progress(self, created_count, fake_cats_to_create, start_time)

        acl_version.invalidate()

        total_time = time.time() - start_time
        total_humanized = time.strftime('%H:%M:%S', time.gmtime(total_time))
        self.stdout.write(message % (created_count, total_humanized))
Ejemplo n.º 22
0
 def delete(self, *args, **kwargs):
     Forum.objects.clear_cache()
     acl_version.invalidate()
     return super(Forum, self).delete(*args, **kwargs)