Example #1
0
    def get(self, request, obj_id=None):
        from apps.realms import get_realms
        if obj_id is None:  # Запрошен список всех известных категорий.
            item = get_category_lists(
                init_kwargs={
                    'show_title': True,
                    'show_links': lambda cat: reverse(self.realm.get_details_urlname(), args=[cat.id])
                },
                additional_parents_aliases=get_category_aliases_under())
            return self.render(request, {'item': item})

        # Выводим список материалов (разбитых по областям сайта) для конкретной категории.
        category_model = get_category_model()
        category = get_object_or_404(category_model.objects.select_related('parent'), pk=obj_id)

        realm_list = []
        for realm in get_realms():
            if hasattr(realm.model, 'categories'):  # ModelWithCategory
                objs = realm.model.get_objects_in_category(category)[:5]
                if objs:
                    realm_list.append({
                        'objects': objs,
                        'url': reverse(realm.get_tags_urlname(), args=[category.id]),
                        'realm': realm
                    })

        return self.render(request, {self.realm.name: category, 'item': category, 'realm_list': realm_list})
Example #2
0
    def get(self, request, obj_id=None):
        from apps.realms import get_realms
        realms = get_realms().values()

        if obj_id is None:  # Запрошен список всех известных категорий.
            item = get_category_lists(
                init_kwargs={
                    'show_title': True,
                    'show_links': lambda cat: reverse(self.realm.get_details_urlname(), args=[cat.id])
                },
                additional_parents_aliases=get_category_aliases_under())
            return self.render(request, {'item': item, 'realms': realms})

        # Выводим список материалов (разбитых по областям сайта) для конкретной категории.
        category = get_object_or_404(Category.objects.select_related('parent'), pk=obj_id)

        realms_links = OrderedDict()
        for realm in realms:
            realm_model = realm.model

            if not hasattr(realm_model, 'categories'):  # ModelWithCategory
                continue

            items = realm_model.get_objects_in_category(category)

            if not items:
                continue

            realm_title = realm_model.get_verbose_name_plural()

            _, plural = realm.get_names()

            realms_links[realm_title] = (plural, items)

        return self.render(request, {self.realm.name: category, 'item': category, 'realms_links': realms_links})
Example #3
0
    def test_get_category_aliases_under(self, create_category):
        cat1 = create_category(alias='cat1',)
        cat2 = create_category(alias='cat2',)
        cat3 = create_category(alias='cat3')

        cat11 = create_category(alias='cat11', parent=cat1)
        cat111 = create_category(parent=cat1)

        root = get_category_aliases_under()
        assert len(root) == 3
        assert 'cat1' in root
        assert 'cat2' in root
        assert 'cat3' in root

        under_cat1 = get_category_aliases_under('cat1')
        assert len(under_cat1) == 1
        assert 'cat11' in under_cat1
Example #4
0
    def test_get_category_aliases_under(self, create_category):
        cat1 = create_category(alias='cat1', )
        cat2 = create_category(alias='cat2', )
        cat3 = create_category(alias='cat3')

        cat11 = create_category(alias='cat11', parent=cat1)
        cat111 = create_category(parent=cat1)

        root = get_category_aliases_under()
        assert len(root) == 3
        assert 'cat1' in root
        assert 'cat2' in root
        assert 'cat3' in root

        under_cat1 = get_category_aliases_under('cat1')
        assert len(under_cat1) == 1
        assert 'cat11' in under_cat1
    def test_get_category_aliases_under(self):
        cat1 = create_category(alias='cat1',)
        cat2 = create_category(alias='cat2',)
        cat3 = create_category(alias='cat3')

        cat11 = create_category(alias='cat11', parent=cat1)
        cat111 = create_category(parent=cat1)

        root = get_category_aliases_under()
        self.assertEqual(len(root), 3)
        self.assertIn('cat1', root)
        self.assertIn('cat2', root)
        self.assertIn('cat3', root)

        under_cat1 = get_category_aliases_under('cat1')
        self.assertEqual(len(under_cat1), 1)
        self.assertIn('cat11', under_cat1)
Example #6
0
    def get(self, request, obj_id=None):
        item = None

        if obj_id is not None:
            item = self.get_object_or_404(obj_id)

        data = request.POST or None
        form = self.realm.form(data, request.FILES or None, instance=item, user=request.user)
        if item is None:
            form.submit_title = self.realm.txt_form_add
        else:
            self.check_edit_permissions(request, item)
            form.submit_title = self.realm.txt_form_edit

        xross_listener(item=item)

        from sitecats.toolbox import get_category_aliases_under
        if isinstance(item, ModelWithCategory):
            item.has_categories = True
            category_handled = item.enable_category_lists_editor(request,
                                additional_parents_aliases=get_category_aliases_under(),
                                handler_init_kwargs={'error_messages_extra_tags': 'alert alert-danger'},
                                lists_init_kwargs={'show_title': True, 'cat_html_class': 'label label-default'},
                                editor_init_kwargs={'allow_add': True, 'allow_new': request.user.is_superuser, 'allow_remove': True,})

            if category_handled:  # Добавилась категория, перенаправим на эту же страницу.
                return redirect(self.realm.get_edit_urlname(), item.id, permanent=True)

        show_modetation_hint = self.realm.model not in (User, Article, Opinion, Community)

        if data is None:
            if show_modetation_hint:
                message_warning(request, 'Обратите внимание, что на данном этапе развития проекта добавляемые материалы проходят модерацию, прежде чем появиться на сайте.')

        if form.is_valid():
            if item is None:
                form.instance.submitter = request.user
                item = form.save()
                message_success(request, 'Объект добавлен.')
                if show_modetation_hint:
                    message_info(request, 'Данный объект появится на сайте после модерации.')
                return redirect(item, permanent=True)
            else:
                form.instance.last_editor = request.user
                form.save()
                message_success(request, 'Данные сохранены.')
                return redirect(self.realm.get_edit_urlname(), item.id, permanent=True)

        return self.render(request, {'form': form, self.realm.name: item, 'item': item})
Example #7
0
    def get(self, request: HttpRequest, obj_id: int = None):
        from .realms import get_realms

        realms = get_realms().values()

        if obj_id is None:  # Запрошен список всех известных категорий.
            item = get_category_lists(
                init_kwargs={
                    'show_title':
                    True,
                    'show_links':
                    lambda cat: reverse(self.realm.get_details_urlname(),
                                        args=[cat.id])
                },
                additional_parents_aliases=get_category_aliases_under())

            return self.render(request, {'item': item, 'realms': realms})

        # Выводим список материалов (разбитых по областям сайта) для конкретной категории.
        category = get_object_or_404(Category.objects.select_related('parent'),
                                     pk=obj_id)

        realms_links = {}

        for realm in realms:
            realm_model = realm.model

            if not hasattr(realm_model, 'categories'):  # ModelWithCategory
                continue

            items = realm_model.get_objects_in_category(category)

            if not items:
                continue

            realm_title = realm_model.get_verbose_name_plural()

            _, plural = realm.get_names()

            realms_links[realm_title] = (plural, items)

        return self.render(
            request, {
                self.realm.name: category,
                'item': category,
                'realms_links': realms_links
            })
Example #8
0
    def get(self,
            request: HttpRequest,
            obj_id: Optional[int] = None) -> HttpResponse:

        item = None

        if obj_id is not None:
            item = self.get_object_or_404(obj_id)

        data = None
        if 'pythonz_form' in request.POST:
            data = request.POST

        form = self.realm.form(data,
                               request.FILES or None,
                               instance=item,
                               user=request.user)

        if item is None:
            form.submit_title = self.realm.txt_form_add

        else:
            self.check_edit_permissions(request, item)
            form.submit_title = self.realm.txt_form_edit

        xross_listener(http_method='POST', item=item)

        if isinstance(item, ModelWithCategory):

            item.has_categories = True
            category_handled = item.enable_category_lists_editor(
                request,
                additional_parents_aliases=get_category_aliases_under(),
                handler_init_kwargs={
                    'error_messages_extra_tags': 'alert alert-danger'
                },
                lists_init_kwargs={
                    'show_title': True,
                    'cat_html_class': 'label label-default'
                },
                editor_init_kwargs={
                    'allow_add': True,
                    'allow_new': request.user.is_superuser,
                    'allow_remove': True,
                    'category_separator': ', '
                })

            if category_handled:  # Добавилась категория, перенаправим на эту же страницу.
                return redirect(self.realm.get_edit_urlname(),
                                item.id,
                                permanent=True)

        show_modetation_hint = self.realm.model not in (User, Article,
                                                        Discussion, Community,
                                                        Event)

        if data is None:

            if show_modetation_hint:
                message_warning(
                    request,
                    'Обратите внимание, что на данном этапе развития проекта добавляемые '
                    'материалы проходят модерацию, прежде чем появиться на сайте.'
                )

        if item is None:
            redirector = lambda: redirect(item, permanent=True)

        else:
            redirector = lambda: redirect(
                self.realm.get_edit_urlname(), item.id, permanent=True)

        if form.is_valid():

            try:
                if item is None:

                    form.instance.submitter = request.user
                    item = form.save()
                    message_success(request, 'Объект добавлен.')

                    if show_modetation_hint:
                        message_info(
                            request,
                            'Данный объект появится на сайте после модерации.')

                else:
                    form.instance.last_editor = request.user
                    form.save()

                    message_success(request, 'Данные сохранены.')

                return redirector()

            except PythonzException as e:
                message_error(request, e.message)

        context = {'form': form, self.realm.name: item, 'item': item}

        try:
            self.update_context(context, request)

        except RedirectRequired:
            return redirector()

        return self.render(request, context)