Exemplo n.º 1
0
def inspector_main(request):
    """Main entry point. Link it to URL whatever you like.

    :param request:
    """
    xross_listener(http_method='POST')
    return render(request, 'issueinspector/index.html')
Exemplo n.º 2
0
    def get(self, request, obj_id):

        item = self.get_object_or_404(obj_id)

        if not request.user.is_superuser:
            if item.is_deleted():
                # Запрещаем доступ к удалённым.
                raise Http404()

            elif item.is_draft() and hasattr(
                    item, 'submitter') and item.submitter != request.user:
                # Закрываем доступ к чужим черновикам.
                raise PermissionDenied()

        item.has_discussions = False

        if isinstance(item, ModelWithDiscussions):
            item.has_discussions = True

        xross_listener(item=item)

        try:
            self._attach_data(item, request)
        except RedirectRequired:
            return redirect(item, permanent=True)

        item_rating_allowed = self._is_rating_allowed(request, item)

        try:
            self.check_edit_permissions(request, item)
            item_edit_allowed = True
        except PermissionDenied:
            item_edit_allowed = False

        if isinstance(item, ModelWithCategory):
            item.has_categories = True
            item.set_category_lists_init_kwargs({
                'show_title':
                True,
                'cat_html_class':
                'label label-default'
            })

        # Нарочно передаём item под двумя разными именами.
        # Требуется для упрощения наслования шаблонов.
        context = {
            self.realm.name: item,
            'item': item,
            'item_edit_allowed': item_edit_allowed,
            'item_rating_allowed': item_rating_allowed
        }
        self.update_context(context, request)
        return self.render(request, context)
Exemplo n.º 3
0
    def get(self, request: HttpRequest, obj_id: int) -> HttpResponse:

        item = self.get_object_or_404(obj_id)

        self.check_view_permissions(request, item)

        item.has_discussions = False

        if isinstance(item, ModelWithDiscussions):
            item.has_discussions = True

        xross_listener(item=item)

        try:
            self._attach_data(item, request)

        except RedirectRequired:
            return redirect(item, permanent=True)

        item_rating_allowed = self._is_rating_allowed(request, item)

        try:
            self.check_edit_permissions(request, item)
            item_edit_allowed = True

        except PermissionDenied:
            item_edit_allowed = False

        if isinstance(item, ModelWithCategory):
            item.has_categories = True
            item.set_category_lists_init_kwargs({
                'show_title':
                True,
                'cat_html_class':
                'label label-default'
            })

        # Нарочно передаём item под двумя разными именами.
        # Требуется для упрощения наслования шаблонов.
        context = {
            self.realm.name: item,
            'item': item,
            'item_edit_allowed': item_edit_allowed,
            'item_rating_allowed': item_rating_allowed
        }

        self.update_context(context, request)

        return self.render(request, context)
Exemplo n.º 4
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})
Exemplo n.º 5
0
    def get(self, request, obj_id):

        item = self.get_object_or_404(obj_id)

        if not request.user.is_superuser:
            if item.is_deleted():
                # Запрещаем доступ к удалённым.
                raise Http404()

            elif item.is_draft() and hasattr(item, 'submitter') and item.submitter != request.user:
                # Закрываем доступ к чужим черновикам.
                raise PermissionDenied()

        item.has_discussions = False

        if isinstance(item, ModelWithDiscussions):
            item.has_discussions = True

        xross_listener(item=item)

        try:
            self._attach_data(item, request)
        except RedirectRequired:
            return redirect(item, permanent=True)

        item_rating_allowed = self._is_rating_allowed(request, item)

        try:
            self.check_edit_permissions(request, item)
            item_edit_allowed = True
        except PermissionDenied:
            item_edit_allowed = False

        if isinstance(item, ModelWithCategory):
            item.has_categories = True
            item.set_category_lists_init_kwargs({'show_title': True, 'cat_html_class': 'label label-default'})

        # Нарочно передаём item под двумя разными именами.
        # Требуется для упрощения наслования шаблонов.
        context = {
            self.realm.name: item,
            'item': item,
            'item_edit_allowed': item_edit_allowed,
            'item_rating_allowed': item_rating_allowed
        }
        self.update_context(context, request)
        return self.render(request, context)
Exemplo n.º 6
0
def inspector_main(request):
    """Main entry point. Link it to URL whatever you like.

    :param request:
    """
    username = ''
    token = ''

    if os.path.exists(CONFIG_NAME):
        conf = ConfigParser()
        conf.read(CONFIG_NAME)
        username = conf['core']['username']
        token = conf['core']['token']

    xross_listener(http_method='POST')
    return render(request, 'issueinspector/index.html', {
        'username': username,
        'token': token,
    })
Exemplo n.º 7
0
    def get(self, request, obj_id):

        item = self.get_object_or_404(obj_id)

        self.check_view_permissions(request, item)

        item.has_discussions = False

        if isinstance(item, ModelWithDiscussions):
            item.has_discussions = True

        xross_listener(item=item)

        try:
            self._attach_data(item, request)
        except RedirectRequired:
            return redirect(item, permanent=True)

        item_rating_allowed = self._is_rating_allowed(request, item)

        try:
            self.check_edit_permissions(request, item)
            item_edit_allowed = True
        except PermissionDenied:
            item_edit_allowed = False

        if isinstance(item, ModelWithCategory):
            item.has_categories = True
            item.set_category_lists_init_kwargs({'show_title': True, 'cat_html_class': 'label label-default'})

        # Нарочно передаём item под двумя разными именами.
        # Требуется для упрощения наслования шаблонов.
        context = {
            self.realm.name: item,
            'item': item,
            'item_edit_allowed': item_edit_allowed,
            'item_rating_allowed': item_rating_allowed
        }
        self.update_context(context, request)
        return self.render(request, context)
Exemplo n.º 8
0
    def get(self, request, obj_id):

        item = self.get_object_or_404(obj_id)

        if not request.user.is_superuser:
            if item.status == RealmBaseModel.STATUS_DELETED:  # Запрещаем доступ к удалённым.
                raise Http404()
            elif item.status == RealmBaseModel.STATUS_DRAFT and hasattr(item, 'submitter') and item.submitter != request.user: # Закрываем доступ к чужим черновикам.
                raise PermissionDenied()

        item.has_opinions = False

        if isinstance(item, ModelWithOpinions):
            item.has_opinions = True

        xross_listener(item=item)

        try:
            self._handle_opinion_form(item, request)
            self._attach_data(item, request)
        except RedirectRequired:
            return redirect(item, permanent=True)

        try:
            item_edit_allowed = (self.realm.is_allowed_edit() and (request.user.is_superuser or request.user == item.submitter))
        except AttributeError:
            item_edit_allowed = (self.realm.is_allowed_edit() and request.user == item)

        if isinstance(item, ModelWithCategory):
            item.has_categories = True
            item.set_category_lists_init_kwargs({'show_title': True, 'cat_html_class': 'label label-default'})

        # Нарочно передаём item под двумя разными именами.
        # Требуется для упрощения наслования шаблонов.
        context = {self.realm.name: item, 'item': item, 'item_edit_allowed': item_edit_allowed}
        self._update_context(context)
        return self.render(request, context)
Exemplo n.º 9
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)