Exemple #1
0
def draft(request, pk, language):
    translation.activate(language or 'ru')
    obj = get_object_or_404(models.Article, pk=pk)
    return render(request, 'marcus/article.html', {
        'article': models.Translation(obj, language),
        'categories': (models.Translation(c, language) for c in obj.categories.all()),
        'language': language,
    })
Exemple #2
0
class Tag(ArticleFeed, ContentFeed):
    def get_object(self, request, slug, language):
        translation.activate(language or 'ru')
        tag = get_object_or_404(models.Tag, slug=slug)
        return tag, language

    def title(self, (tag, language)):
        tag = models.Translation(tag, language)
        return u'%s » %s' % (settings.MARCUS_TITLE, tag.title())
Exemple #3
0
class Category(ArticleFeed, ContentFeed):
    def get_object(self, request, slug, language):
        translation.activate(language or 'ru')
        category = get_object_or_404(models.Category, slug=slug)
        return category, language

    def title(self, (category, language)):
        category = models.Translation(category, language)
        return u'%s » %s' % (settings.MARCUS_TITLE, category.title())
Exemple #4
0
def article(request, year, month, day, slug, language):
    obj = get_object_or_404(
        models.Article, published__year=year, published__month=month, published__day=day, slug=slug
    )
    guest_name = request.session.get('guest_name', '')
    guest_email = request.session.get('guest_email', '')
    translation.activate(language or obj.only_language() or 'ru')
    if request.method == 'POST':
        form = forms.CommentForm(request.user, get_ip(request), obj, language, request.POST)
        if form.is_valid():
            request.session['guest_name'] = form.cleaned_data.get('name', '')
            request.session['guest_email'] = form.cleaned_data.get('xemail', '')
            form.cleaned_data['text'] = form.cleaned_data['text'].replace('script', u'sсript')
            comment = form.save()
            return _process_new_comment(request, comment, language, True)
    else:
        form = forms.CommentForm(article=obj, language=language)

    comments = models.Comment.common.language(language)\
        .select_related('author', 'author__scipio_profile', 'article')\
        .filter(article=obj, type="comment")\
        .filter(Q(guest_name=guest_name) | ~Q(approved=None))\
        .order_by('created', 'approved')

    unapproved = False
    try:
        unapproved_pk = request.session.get('unapproved')
        if unapproved_pk:
            unapproved = models.Comment.objects.get(pk=unapproved_pk, approved=None)
    except models.Comment.DoesNotExist:
        if 'unapproved' in request.session:
            del request.session['unapproved']

    retweet_url = u'http://twitter.com/home/?status={title}%20{url}%20{suffix}'.format(
        title=obj.title(),
        url=utils.absolute_url(utils.iurl(reverse('marcus-article-short', args=[obj.published.year, obj.slug, ]), language)),
        suffix=settings.MARCUS_RETWEET_SUFFIX.replace('@', '%40')
    )

    keywords = [tag.title(language) for tag in obj.tags.all()] +\
        [category.title(language) for category in obj.categories.all()]

    return render(request, 'marcus/article.html', {
        'article': models.Translation(obj, language),
        'comments': comments,
        # 'noteworthy_count': comments.filter(noteworthy=True).count(),
        'form': not obj.comments_hidden and form,
        'unapproved': unapproved,
        'language': language,
        'guest_name': guest_name,
        'guest_email': guest_email,
        'retweet_url': retweet_url,
        'meta_keywords': ", ".join(keywords),
        'meta_description': (obj.intro(language) or "").replace('"', "'"),
    })
Exemple #5
0
def category(request, slug, language):
    translation.activate(language or 'ru')
    category = get_object_or_404(models.Category, slug=slug)
    return object_list(
        request,
        models.Article.public.language(language).filter(categories=category),
        'marcus/category.html',
        {
            'category': models.Translation(category, language),
            'language': language,
        },
    )
Exemple #6
0
def _process_new_comment(request, comment, language, check_login):
    spam_status = antispam.conveyor.validate(request, comment=comment)
    if spam_status == 'spam':
        comment.delete()
        return render(request, 'marcus/spam.html', {
            'text': comment.text,
            'admins': [e for n, e in settings.ADMINS],
        })
    if check_login and not request.user.is_authenticated():
        form = AuthForm(request.session, {'openid_identifier': request.POST['name']})
        if form.is_valid():
            comment = models.Translation(comment, language)
            url = form.auth_redirect(request, target=comment.get_absolute_url(), data={'acquire': str(comment.pk)})
            return redirect(url)
    comment.spam_status = spam_status
    if spam_status == 'clean':
        comment.approved = datetime.now()
    else:
        request.session['unapproved'] = comment.pk
    comment.save()
    return redirect(models.Translation(comment, language))
Exemple #7
0
def tag(request, slug, language):
    translation.activate(language or 'ru')
    tag = get_object_or_404(models.Tag, slug=slug)
    return object_list(
        request,
        models.Article.public.language(language).filter(tags=tag),
        'marcus/tag.html',
        {
            'tag': models.Translation(tag, language),
            'language': language,
        },
    )
Exemple #8
0
class ArticleFeed(object):
    title_template = 'marcus/feeds/article_title.html'
    description_template = 'marcus/feeds/article_summary.html'
    content_template = 'marcus/feeds/article_content.html'
    author = User.objects.get(pk=settings.MARCUS_AUTHOR_ID)
    title = settings.MARCUS_TITLE
    subtitle = settings.MARCUS_SUBTITLE

    def author_name(self):
        return self.author.scipio_profile

    def items(self, (obj, language)):
        qs = self.get_query_set(obj, language)[:settings.MARCUS_ITEMS_IN_FEED]
        return [models.Translation(a, language) for a in qs]
Exemple #9
0
class ArticleComment(CommentFeed, ContentFeed):
    def get_object(self, request, year, month, day, slug, language):
        translation.activate(language or 'ru')
        return get_object_or_404(
            models.Article,
            published__year=year,
            published__month=month,
            published__day=day,
            slug=slug,
        ), language

    def title(self, (article, language)):
        article = models.Translation(article, language)
        return u'%s » %s' % (article.title(), _(u'comments'))
Exemple #10
0
class CommentFeed(object):
    title_template = 'marcus/feeds/comment_title.html'
    description_template = 'marcus/feeds/comment_summary.html'
    content_template = 'marcus/feeds/comment_content.html'
    subtitle = settings.MARCUS_SUBTITLE

    def title(self):
        return u'%s » %s' % (settings.MARCUS_TITLE, _(u'comments'))

    def items(self, (obj, language)):
        qs = self.get_query_set(obj, language).select_related(
            'author', 'author__scipio_profile', 'article',
            'article__author')[:settings.MARCUS_ITEMS_IN_FEED]
        return [models.Translation(c, language) for c in qs]
Exemple #11
0
    def get_object(self, request, year, month, day, slug, language):
        translation.activate(language or 'ru')
        return get_object_or_404(
            models.Article,
            published__year=year,
            published__month=month,
            published__day=day,
            slug=slug,
        ), language

    def title(self, (article, language)):
        article = models.Translation(article, language)
        return u'%s » %s' % (article.title(), _(u'comments'))

    def link(self, (article, language)):
        article = models.Translation(article, language)
        return article.get_absolute_url()

    def get_query_set(self, article, language):
        return models.Comment.public.language(language).filter(
            article=article).order_by('-created')


class ArticleCommentShort(ArticleComment):
    def get_object(self, request, year, slug, language):
        translation.activate(language or 'ru')
        return get_object_or_404(
            models.Article,
            published__year=year,
            slug=slug,
        ), language
Exemple #12
0
 def _translate(v):
     if hasattr(v, '__iter__'):
         return [_translate(i) for i in v]
     else:
         return models.Translation(v, language)