Esempio n. 1
0
def create(request, comment_id):
    comment = get_object_or_404(Comment.objects.exclude(user=request.user),
                                pk=comment_id)
    form = LikeForm(user=request.user,
                    comment=comment,
                    data=post_data(request))

    if is_post(request) and form.is_valid():
        like = form.save()
        like.comment.increase_likes_count()

        if is_ajax(request):
            return json_response({'url_delete': like.get_delete_url()})

        return safe_redirect(request,
                             'next',
                             comment.get_absolute_url(),
                             method='POST')

    return render(request=request,
                  template_name='spirit/comment/like/create.html',
                  context={
                      'form': form,
                      'comment': comment
                  })
Esempio n. 2
0
def _moderate(request, pk, field_name, to_value, action=None, message=None):
    topic = get_object_or_404(Topic, pk=pk)

    if is_post(request):
        count = (Topic.objects.filter(pk=pk).exclude(**{
            field_name: to_value
        }).update(**{
            field_name: to_value,
            'reindex_at': timezone.now()
        }))

        if count and action is not None:
            Comment.create_moderation_action(user=request.user,
                                             topic=topic,
                                             action=action)

        if message is not None:
            messages.info(request, message)

        return safe_redirect(request,
                             'next',
                             topic.get_absolute_url(),
                             method='POST')

    return render(request=request,
                  template_name='spirit/topic/moderate.html',
                  context={'topic': topic})
Esempio n. 3
0
def publish(request, category_id=None):
    if category_id:
        get_object_or_404(
            Category.objects.visible(),
            pk=category_id)

    user = request.user
    form = TopicForm(
        user=user,
        data=post_data(request),
        initial={'category': category_id})
    cform = CommentForm(
        user=user,
        data=post_data(request))
    if (is_post(request) and
            all([form.is_valid(), cform.is_valid()]) and
            not request.is_limited()):
        if not user.st.update_post_hash(form.get_topic_hash()):
            return redirect(
                request.POST.get('next', None) or
                form.get_category().get_absolute_url())
        # wrap in transaction.atomic?
        topic = form.save()
        cform.topic = topic
        comment = cform.save()
        comment_posted(comment=comment, mentions=cform.mentions)
        return redirect(topic.get_absolute_url())
    return render(
        request=request,
        template_name='spirit/topic/publish.html',
        context={'form': form, 'cform': cform})
Esempio n. 4
0
def detail(request, pk):
    loggedinuser = request.user
    profile = Profile.objects.get(user=loggedinuser)
    flag = get_object_or_404(CommentFlag, pk=pk)
    form = CommentFlagForm(user=request.user,
                           data=post_data(request),
                           instance=flag)

    if is_post(request) and form.is_valid():
        form.save()
        messages.info(request, _("The flag has been moderated!"))
        return redirect(reverse("spirit:admin:flag:index"))

    flags = yt_paginate(Flag.objects.filter(comment=flag.comment),
                        per_page=config.comments_per_page,
                        page_number=request.GET.get('page', 1))

    return render(request=request,
                  template_name='spirit/comment/flag/admin/detail.html',
                  context={
                      'flag': flag,
                      'flags': flags,
                      'form': form,
                      'profile': profile
                  })
Esempio n. 5
0
def register(request, registration_form=RegistrationForm):
    if request.user.is_authenticated:
        return redirect(request.GET.get('next', reverse('spirit:user:update')))

    form = registration_form(data=post_data(request))
    if (is_post(request) and
            not request.is_limited() and
            form.is_valid()):
        user = form.save()
        send_activation_email(request, user)
        messages.info(
            request, _(
                "We have sent you an email to %(email)s "
                "so you can activate your account!") % {'email': form.get_email()})

        # TODO: email-less activation
        # if not settings.REGISTER_EMAIL_ACTIVATION_REQUIRED:
        # login(request, user)
        # return redirect(request.GET.get('next', reverse('spirit:user:update')))

        return redirect(reverse(settings.LOGIN_URL))
    return render(
        request=request,
        template_name='spirit/user/auth/register.html',
        context={'form': form})
Esempio n. 6
0
def config_basic(request):
    form = BasicConfigForm(data=post_data(request))
    if is_post(request) and form.is_valid():
        form.save()
        messages.info(request, _("Settings updated!"))
        return safe_redirect(request, "next", request.get_full_path())
    return render(request=request,
                  template_name='spirit/admin/config_basic.html',
                  context={'form': form})
Esempio n. 7
0
def delete(request, pk, remove=True):
    comment = get_object_or_404(Comment, pk=pk)
    if is_post(request):
        (Comment.objects
         .filter(pk=pk)
         .update(is_removed=remove))
        return redirect(request.GET.get('next', comment.get_absolute_url()))
    return render(
        request=request,
        template_name='spirit/comment/moderate.html',
        context={'comment': comment})
Esempio n. 8
0
def update(request, pk):
    comment = Comment.objects.for_update_or_404(pk, request.user)
    form = CommentForm(data=post_data(request), instance=comment)
    if is_post(request) and form.is_valid():
        pre_comment_update(comment=Comment.objects.get(pk=comment.pk))
        comment = form.save()
        post_comment_update(comment=comment)
        return redirect(request.POST.get('next', comment.get_absolute_url()))
    return render(
        request=request,
        template_name='spirit/comment/update.html',
        context={'form': form})
Esempio n. 9
0
def password_change(request):
    form = PasswordChangeForm(
        user=request.user,
        data=post_data(request))
    if is_post(request) and form.is_valid():
        form.save()
        update_session_auth_hash(request, form.user)
        messages.info(request, _("Your password has been changed!"))
        return redirect(reverse('spirit:user:update'))
    return render(
        request=request,
        template_name='spirit/user/profile_password_change.html',
        context={'form': form})
Esempio n. 10
0
def edit(request, user_id):
    user = get_object_or_404(User, pk=user_id)
    uform = UserForm(data=post_data(request), instance=user)
    form = UserProfileForm(data=post_data(request), instance=user.st)
    if is_post(request) and all([uform.is_valid(), form.is_valid()]):
        uform.save()
        form.save()
        messages.info(request, _("This profile has been updated!"))
        return safe_redirect(request, "next", request.get_full_path())
    return render(request=request,
                  template_name='spirit/user/admin/edit.html',
                  context={
                      'form': form,
                      'uform': uform
                  })
Esempio n. 11
0
def email_change(request):
    form = EmailChangeForm(
        user=request.user,
        data=post_data(request))
    if is_post(request) and form.is_valid():
        send_email_change_email(request, request.user, form.get_email())
        messages.info(
            request,
            _("We have sent you an email "
              "so you can confirm the change!"))
        return redirect(reverse('spirit:user:update'))
    return render(
        request=request,
        template_name='spirit/user/profile_email_change.html',
        context={'form': form})
Esempio n. 12
0
def update(request):
    uform = UserForm(
        data=post_data(request),
        instance=request.user)
    form = UserProfileForm(
        data=post_data(request),
        instance=request.user.st)
    if is_post(request) and all([uform.is_valid(), form.is_valid()]):  # TODO: test!
        uform.save()
        form.save()
        messages.info(request, _("Your profile has been updated!"))
        return redirect(reverse('spirit:user:update'))
    return render(
        request=request,
        template_name='spirit/user/profile_update.html',
        context={'form': form, 'uform': uform})
Esempio n. 13
0
def create(request, comment_id):
    comment = get_object_or_404(Comment, pk=comment_id)
    form = FlagForm(
        user=request.user,
        comment=comment,
        data=post_data(request))

    if is_post(request) and form.is_valid():
        form.save()
        return safe_redirect(request, 'next', comment.get_absolute_url(), method='POST')

    return render(
        request=request,
        template_name='spirit/comment/flag/create.html',
        context={
            'form': form,
            'comment': comment})
Esempio n. 14
0
def update(request, pk):
    topic = Topic.objects.for_update_or_404(pk, request.user)
    category_id = topic.category_id
    form = TopicForm(
        user=request.user,
        data=post_data(request),
        instance=topic)
    if is_post(request) and form.is_valid():
        topic = form.save()
        if topic.category_id != category_id:
            Comment.create_moderation_action(
                user=request.user, topic=topic, action=Comment.MOVED)
        return redirect(request.POST.get('next', topic.get_absolute_url()))
    return render(
        request=request,
        template_name='spirit/topic/update.html',
        context={'form': form})
Esempio n. 15
0
def delete(request, pk):
    like = get_object_or_404(CommentLike, pk=pk, user=request.user)

    if is_post(request):
        like.delete()
        like.comment.decrease_likes_count()

        if request.is_ajax():
            url = reverse(
                'spirit:comment:like:create',
                kwargs={'comment_id': like.comment.pk})
            return json_response({'url_create': url, })

        return redirect(request.POST.get('next', like.comment.get_absolute_url()))

    return render(
        request=request,
        template_name='spirit/comment/like/delete.html',
        context={'like': like})
Esempio n. 16
0
def resend_activation_email(request):
    if request.user.is_authenticated:
        return redirect(request.GET.get('next', reverse('spirit:user:update')))

    form = ResendActivationForm(data=post_data(request))
    if is_post(request):
        if not request.is_limited() and form.is_valid():
            user = form.get_user()
            send_activation_email(request, user)

        # TODO: show if is_valid only
        messages.info(
            request,
            _("If you don't receive an email, please make sure you've entered "
              "the address you registered with, and check your spam folder."))
        return redirect(reverse(settings.LOGIN_URL))
    return render(request=request,
                  template_name='spirit/user/auth/activation_resend.html',
                  context={'form': form})
Esempio n. 17
0
def publish(request, user_id=None):
    initial = None
    if user_id:  # todo: move to form
        user_to = get_object_or_404(User, pk=user_id)
        initial = {'users': [user_to.st.nickname]}

    user = request.user
    tform = TopicForPrivateForm(
        user=user, data=post_data(request))
    cform = CommentForm(
        user=user, data=post_data(request))
    tpform = TopicPrivateManyForm(
        user=user, data=post_data(request), initial=initial)

    if (is_post(request) and
            all([tform.is_valid(), cform.is_valid(), tpform.is_valid()]) and
            not request.is_limited()):
        if not user.st.update_post_hash(tform.get_topic_hash()):
            return safe_redirect(
                request, 'next', lambda: tform.category.get_absolute_url(), method='POST')

        # wrap in transaction.atomic?
        topic = tform.save()
        cform.topic = topic
        comment = cform.save()
        comment_posted(comment=comment, mentions=None)
        tpform.topic = topic
        tpform.save_m2m()
        TopicNotification.bulk_create(
            users=tpform.get_users(), comment=comment)
        return redirect(topic.get_absolute_url())

    return render(
        request=request,
        template_name='spirit/topic/private/publish.html',
        context={
            'tform': tform,
            'cform': cform,
            'tpform': tpform})
Esempio n. 18
0
def join_in(request, topic_id):
    # todo: replace by create_access()?
    # This is for topic creators who left their own topics and want to join again
    topic = get_object_or_404(
        Topic,
        pk=topic_id,
        user=request.user,
        category_id=settings.ST_TOPIC_PRIVATE_CATEGORY_PK)
    form = TopicPrivateJoinForm(
        topic=topic,
        user=request.user,
        data=post_data(request))
    if is_post(request) and form.is_valid():
        topic_private = form.save()
        notify_access(user=form.get_user(), topic_private=topic_private)
        return safe_redirect(
            request, 'next', topic.get_absolute_url(), method='POST')
    return render(
        request=request,
        template_name='spirit/topic/private/join.html',
        context={
            'topic': topic,
            'form': form})
Esempio n. 19
0
def publish(request, topic_id, pk=None):
    initial = None
    if pk:  # todo: move to form
        comment = get_object_or_404(
            Comment.objects.for_access(user=request.user), pk=pk)
        quote = markdown.quotify(comment.comment, comment.user.st.nickname)
        initial = {'comment': quote}

    user = request.user
    topic = get_object_or_404(
        Topic.objects.opened().for_access(user),
        pk=topic_id)
    form = CommentForm(
        user=user,
        topic=topic,
        data=post_data(request),
        initial=initial)

    if is_post(request) and not request.is_limited() and form.is_valid():
        if not user.st.update_post_hash(form.get_comment_hash()):
            # Hashed comment may have not been saved yet
            return redirect(
                request.POST.get('next', None) or
                Comment
                .get_last_for_topic(topic_id)
                .get_absolute_url())

        comment = form.save()
        comment_posted(comment=comment, mentions=form.mentions)
        return redirect(request.POST.get('next', comment.get_absolute_url()))

    return render(
        request=request,
        template_name='spirit/comment/publish.html',
        context={
            'form': form,
            'topic': topic})