示例#1
0
def flatpage(request, url):
    """
    Public interface to the flat page view.

    Models: `flatpages.flatpages`
    Templates: Uses the template defined by the ``template_name`` field,
        or `flatpages/default.html` if template_name is not defined.
    Context:
        flatpage
            `flatpages.flatpages` object
    """
    if not url.startswith('/'):
        url = '/' + url
    try:
        f = get_object_or_404(FlatPage,
                              url__exact=url,
                              sites__id__exact=settings.SITE_ID)
    except Http404:
        if not url.endswith('/') and settings.APPEND_SLASH:
            url += '/'
            f = get_object_or_404(FlatPage,
                                  url__exact=url,
                                  sites__id__exact=settings.SITE_ID)
            return HttpResponsePermanentRedirect('%s/' % request.path)
        else:
            raise
    return render_flatpage(request, f)
def delete(request, comment_id, next=None):
    """
    Deletes a comment. Confirmation on GET, action on POST. Requires the "can
    moderate comments" permission.

    Templates: `comments/delete.html`,
    Context:
        comment
            the flagged `comments.comment` object
    """
    comment = get_object_or_404(comments.get_model(),
                                pk=comment_id,
                                site__pk=settings.SITE_ID)

    # Delete on POST
    if request.method == 'POST':
        # Flag the comment as deleted instead of actually deleting it.
        perform_delete(request, comment)
        return next_redirect(request.POST.copy(),
                             next,
                             delete_done,
                             c=comment.pk)

    # Render a form on GET
    else:
        return render_to_response('comments/delete.html', {
            'comment': comment,
            "next": next
        }, template.RequestContext(request))
def flag(request, comment_id, next=None):
    """
    Flags a comment. Confirmation on GET, action on POST.

    Templates: `comments/flag.html`,
    Context:
        comment
            the flagged `comments.comment` object
    """
    comment = get_object_or_404(comments.get_model(),
                                pk=comment_id,
                                site__pk=settings.SITE_ID)

    # Flag on POST
    if request.method == 'POST':
        perform_flag(request, comment)
        return next_redirect(request.POST.copy(),
                             next,
                             flag_done,
                             c=comment.pk)

    # Render a form on GET
    else:
        return render_to_response('comments/flag.html', {
            'comment': comment,
            "next": next
        }, template.RequestContext(request))
def approve(request, comment_id, next=None):
    """
    Approve a comment (that is, mark it as public and non-removed). Confirmation
    on GET, action on POST. Requires the "can moderate comments" permission.

    Templates: `comments/approve.html`,
    Context:
        comment
            the `comments.comment` object for approval
    """
    comment = get_object_or_404(comments.get_model(),
                                pk=comment_id,
                                site__pk=settings.SITE_ID)

    # Delete on POST
    if request.method == 'POST':
        # Flag the comment as approved.
        perform_approve(request, comment)
        return next_redirect(request.POST.copy(),
                             next,
                             approve_done,
                             c=comment.pk)

    # Render a form on GET
    else:
        return render_to_response('comments/approve.html', {
            'comment': comment,
            "next": next
        }, template.RequestContext(request))
示例#5
0
def forum(request, slug, **kwargs):
    forum = get_object_or_404(Forum, slug=slug)
    if request.method == 'POST' and is_user_can_add_topic_or_article(request):
        form = forms.TopicForm(forum, request.user,
                               request.META.get('REMOTE_ADDR'), request.POST)
        if form.is_valid():
            article = form.save()
            inc_article_cntr(request)
            return _process_new_article(request, article, True, True)
    else:
        form = forms.TopicForm(forum, request.user,
                               request.META.get('REMOTE_ADDR'))

    kwargs['queryset'] = forum.topic_set.filter(
        spam_status='clean', is_forum=True).select_related('forum')
    kwargs['extra_context'] = {
        'forum':
        forum,
        'form':
        form,
        'page_id':
        'forum',
        'groups':
        _get_left_side_cont(),
        'summary':
        _get_summary_cont(request),
        'is_user_can_add_topic_or_article':
        is_user_can_add_topic_or_article(request)
    }
    return object_list(request, **kwargs)
示例#6
0
def user_topics(request, id):
    profile = get_object_or_404(Profile, pk=id)
    return object_list(request,
                       queryset=profile.topics(),
                       allow_empty=True,
                       paginate_by=settings.CICERO_PAGINATE_BY,
                       template_name='cicero/user_topics.html',
                       extra_context={
                           'author_profile': profile,
                       })
示例#7
0
def article_delete(request, id):
    article = get_object_or_404(Article, pk=id)
    if not request.user.cicero_profile.can_change_article(article):
        return HttpResponseForbidden('Нет прав для удаления')
    article.deleted = datetime.now()
    article.save()
    caching.invalidate_by_article(article.topic.forum.slug, article.topic.id)
    if article.topic.article_set.count():
        return HttpResponseRedirect(
            reverse(topic, args=(article.topic.forum.slug, article.topic.id)))
    else:
        article.topic.deleted = datetime.now()
        article.topic.save()
        return HttpResponseRedirect(
            reverse(forum, args=(article.topic.forum.slug, )))
示例#8
0
def topic_to_article(request, article_id):
    if not request.user.cicero_profile.moderator:
        return HttpResponseForbidden('Нет прав отщеплять топики')
    article = get_object_or_404(Article, pk=article_id)
    if request.method == 'POST':
        form = forms.ToArticleForm(article, request.POST)
        if form.is_valid():
            new_topic = form.save()
            return HttpResponseRedirect(
                reverse(topic, args=(new_topic.forum.slug, new_topic.id)))
    else:
        form = forms.ToArticleForm(article)
    return render_to_response(request, 'cicero/topic_to_article.html', {
        'form': form,
        'article': article,
    })
示例#9
0
def article_publish(request, id):
    if not request.user.cicero_profile.moderator:
        return HttpResponseForbidden('Нет прав публиковать спам')
    article = get_object_or_404(Article, pk=id)
    #antispam.conveyor.submit_ham(article.spam_status, article=article)
    article.set_spam_status('clean')
    if not article.from_guest():
        pass


#        scipio_profile = article.author.user.scipio_profile
#        if scipio_profile.spamer is None:
#            scipio_profile.spamer = False
#            scipio_profile.save()
    caching.invalidate_by_article(article.topic.forum.slug, article.topic.id)
    return HttpResponseRedirect(reverse(spam_queue))
示例#10
0
def topic_edit(request, topic_id):
    t = get_object_or_404(Topic, pk=topic_id)
    if not request.user.cicero_profile.can_change_topic(t):
        return HttpResponseForbidden('Нет прав редактировать топик')
    if request.method == 'POST':
        form = forms.TopicEditForm(request.POST, instance=t)
        if form.is_valid():
            form.save()
            caching.invalidate_by_article(t.forum.slug, t.id)
            return HttpResponseRedirect(
                reverse(topic, args=[t.forum.slug, t.id]))
    else:
        form = forms.TopicEditForm(instance=t)
    return render_to_response(request, 'cicero/topic_edit.html', {
        'form': form,
        'topic': t,
    })
def __get_repo(request, name, rev):
    """
    this private function gets the repository object from the database and
    returns the context view of the repository
    """
    repo = get_object_or_404(HgRepository, name=name)
    try:
        repo.set_context(HgContext(repo, rev))
        repo.absolute_url = ''.join([
            'http', ('', 's')[request.is_secure()], '://',
            request.META['HTTP_HOST'],
            repo.get_absolute_url()
        ])
    except RepoError:
        raise Http404

    return repo
示例#12
0
def topic(request, slug, id, **kwargs):
    topic = get_object_or_404(Topic, forum__slug=slug, pk=id)
    if request.method == 'POST' and is_user_can_add_topic_or_article(request):
        form = forms.ArticleForm(topic, request.user,
                                 request.META.get('REMOTE_ADDR'), request.POST)
        if form.is_valid():
            article = form.save()
            inc_article_cntr(request)
            r = _process_new_article(request, article, False, True)
            return r
    else:
        form = forms.ArticleForm(topic, request.user,
                                 request.META.get('REMOTE_ADDR'))
    if request.user.is_authenticated():
        profile = request.user.cicero_profile
        is_can_change_carmas = profile.today_change_carmas < profile.max_change_carmas
        changed = profile.add_read_articles(topic.article_set.all())
        if changed:
            profile.save()
            caching.invalidate_by_user(request)
    else:
        is_can_change_carmas = False

    kwargs['queryset'] = topic.article_set.filter(
        spam_status='clean', is_forum=True).select_related()
    kwargs['extra_context'] = {
        'topic':
        topic,
        'form':
        form,
        'page_id':
        'topic',
        'show_last_link':
        True,
        'groups':
        _get_left_side_cont(),
        'summary':
        _get_summary_cont(request),
        'is_user_can_add_topic_or_article':
        is_user_can_add_topic_or_article(request),
        'is_can_change_carmas':
        is_can_change_carmas
    }
    return object_list(request, **kwargs)
示例#13
0
def article_spam(request, id):
    if not request.user.cicero_profile.moderator:
        return HttpResponseForbidden('Нет прав определять спам')
    article = get_object_or_404(Article, pk=id)
    if not article.from_guest():
        pass


#        scipio_profile = article.author.user.scipio_profile
#        if scipio_profile.spamer is None:
#            scipio_profile.spamer = True
#            scipio_profile.save()
#antispam.conveyor.submit_spam(article=article)
    slug, topic_id = article.topic.forum.slug, article.topic.id
    article.delete()
    caching.invalidate_by_article(slug, topic_id)
    if Topic.objects.filter(pk=topic_id).count():
        return HttpResponseRedirect(reverse(topic, args=(slug, topic_id)))
    else:
        return HttpResponseRedirect(reverse(forum, args=(slug, )))
示例#14
0
def article_edit(request, id):
    article = get_object_or_404(Article, pk=id)
    if not request.user.cicero_profile.can_change_article(article):
        return HttpResponseForbidden('Нет прав для редактирования')
    if request.method == 'POST':
        form = forms.ArticleEditForm(request.POST, instance=article)
        if form.is_valid():
            form.save()
            caching.invalidate_by_article(article.topic.forum.slug,
                                          article.topic.id)
            url = '%s#%s' % (reverse(
                topic,
                args=(article.topic.forum.slug, article.topic.id)), article.id)
            return HttpResponseRedirect(url)
    else:
        form = forms.ArticleEditForm(instance=article)
    return render_to_response(request, 'cicero/article_edit.html', {
        'form': form,
        'article': article,
    })
示例#15
0
    def user_change_password(self, request, id, form_url=''):
        if not self.has_change_permission(request):
            raise PermissionDenied
        user = get_object_or_404(self.queryset(request), pk=id)
        if request.method == 'POST':
            form = self.change_password_form(user, request.POST)
            if form.is_valid():
                form.save()
                msg = ugettext('Password changed successfully.')
                messages.success(request, msg)
                return HttpResponseRedirect('..')
        else:
            form = self.change_password_form(user)

        fieldsets = [(None, {'fields': form.base_fields.keys()})]
        adminForm = admin.helpers.AdminForm(form, fieldsets, {})

        context = {
            'title': _('Change password: %s') % escape(user.username),
            'adminForm': adminForm,
            'form_url': mark_safe(form_url),
            'form': form,
            'is_popup': '_popup' in request.REQUEST,
            'add': True,
            'change': False,
            'has_delete_permission': False,
            'has_change_permission': True,
            'has_absolute_url': False,
            'opts': self.model._meta,
            'original': user,
            'save_as': False,
            'show_save': True,
        }
        return TemplateResponse(request, [
            self.change_user_password_template or
            'admin/auth/user/change_password.html'
        ], context, current_app=self.admin_site.name)
示例#16
0
def search(request, slug):
    forum = get_object_or_404(Forum, slug=slug)
    try:
        try:
            from sphinxapi import SphinxClient, SPH_MATCH_EXTENDED, SPH_SORT_RELEVANCE
        except ImportError:
            raise SearchUnavailable()
        term = request.GET.get('term', '').encode('utf-8')
        if term:
            sphinx = SphinxClient()
            sphinx.SetServer(settings.CICERO_SPHINX_SERVER,
                             settings.CICERO_SPHINX_PORT)
            sphinx.SetMatchMode(SPH_MATCH_EXTENDED)
            sphinx.SetSortMode(SPH_SORT_RELEVANCE)
            sphinx.SetFilter('gid', [forum.id])
            paginator = Paginator(SphinxObjectList(sphinx, term),
                                  settings.CICERO_PAGINATE_BY)
            try:
                page = paginator.page(request.GET.get('page', '1'))
            except InvalidPage:
                raise Http404
        else:
            paginator = Paginator([], 1)
            page = paginator.page(1)
        return render_to_response(
            request, 'cicero/search.html', {
                'page_id': 'search',
                'forum': forum,
                'term': term,
                'paginator': paginator,
                'page_obj': page,
                'query_dict': request.GET,
            })
    except SearchUnavailable:
        raise
        return render_to_response(request, 'cicero/search_unavailable.html',
                                  {})
def __get_repo(request, name):
    """
    this private function get the repository object from the database and
    returns the context view of the repository
    """
    return get_object_or_404(HgRepository, name=name) #HgRepository.objects.get(name=name)