Пример #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
                  })
Пример #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})
Пример #3
0
def delete(request, pk):
    favorite = get_object_or_404(TopicFavorite, pk=pk, user=request.user)
    favorite.delete()
    return safe_redirect(request,
                         'next',
                         favorite.topic.get_absolute_url(),
                         method='POST')
Пример #4
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()):
            default_url = lambda: form.get_category().get_absolute_url()
            return safe_redirect(request, 'next', default_url, method='POST')
        # 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
                  })
Пример #5
0
def mark_all_as_read(request):
    (TopicNotification.objects.for_access(
        request.user).filter(is_read=False).update(is_read=True))
    return safe_redirect(request,
                         'next',
                         reverse('spirit:topic:notification:index'),
                         method='POST')
Пример #6
0
def custom_logout(request, **kwargs):
    if not request.user.is_authenticated:
        return safe_redirect(request, 'next', reverse(settings.LOGIN_URL))

    if request.method == 'POST':
        return _logout_view(request, **kwargs)

    return render(request, 'spirit/user/auth/logout.html')
Пример #7
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})
Пример #8
0
def custom_login(request, **kwargs):
    # Currently, Django 1.5 login view does not redirect somewhere if the user is logged in
    if request.user.is_authenticated:
        return safe_redirect(request, 'next',
                             request.user.st.get_absolute_url())

    if request.method == "POST" and request.is_limited():
        return redirect(request.get_full_path())

    return _login_view(request, authentication_form=LoginForm, **kwargs)
Пример #9
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 safe_redirect(request, 'next', comment.get_absolute_url())
    return render(
        request=request,
        template_name='spirit/comment/moderate.html',
        context={'comment': comment})
Пример #10
0
def close_or_open(request, pk, close=True):
    # todo: moderators should be able to close it
    poll = get_object_or_404(CommentPoll, pk=pk, comment__user=request.user)

    if close:
        close_at = timezone.now()
    else:
        close_at = None

    (CommentPoll.objects.filter(pk=poll.pk).update(close_at=close_at))

    return safe_redirect(request, 'next', poll.get_absolute_url())
Пример #11
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 safe_redirect(request, 'next', comment.get_absolute_url(), method='POST')
    return render(
        request=request,
        template_name='spirit/comment/update.html',
        context={'form': form})
Пример #12
0
def create(request, topic_id):
    topic = get_object_or_404(Topic, pk=topic_id)
    form = FavoriteForm(user=request.user, topic=topic, data=request.POST)

    if form.is_valid():
        form.save()
    else:
        messages.error(request, utils.render_form_errors(form))

    return safe_redirect(request,
                         'next',
                         topic.get_absolute_url(),
                         method='POST')
Пример #13
0
def vote(request, pk):
    # TODO: check if user has access to this topic/poll
    poll = get_object_or_404(CommentPoll.objects.unremoved(), pk=pk)

    if not request.user.is_authenticated:
        return redirect_to_login(next=poll.get_absolute_url())

    form = PollVoteManyForm(user=request.user, poll=poll, data=request.POST)

    if form.is_valid():
        CommentPollChoice.decrease_vote_count(poll=poll, voter=request.user)
        form.save_m2m()
        CommentPollChoice.increase_vote_count(poll=poll, voter=request.user)
        return safe_redirect(request,
                             'next',
                             poll.get_absolute_url(),
                             method='POST')

    messages.error(request, utils.render_form_errors(form))
    return safe_redirect(request,
                         'next',
                         poll.get_absolute_url(),
                         method='POST')
Пример #14
0
def create_access(request, topic_id):
    topic_private = TopicPrivate.objects.for_create_or_404(topic_id, request.user)
    form = TopicPrivateInviteForm(
        topic=topic_private.topic,
        data=post_data(request))

    if form.is_valid():
        form.save()
        notify_access(user=form.get_user(), topic_private=topic_private)
    else:
        messages.error(request, utils.render_form_errors(form))

    return safe_redirect(
        request, 'next', topic_private.get_absolute_url(), method='POST')
Пример #15
0
def update(request, pk):
    notification = get_object_or_404(TopicNotification,
                                     pk=pk,
                                     user=request.user)
    form = NotificationForm(data=request.POST, instance=notification)

    if form.is_valid():
        form.save()
    else:
        messages.error(request, utils.render_form_errors(form))

    return safe_redirect(request,
                         'next',
                         notification.topic.get_absolute_url(),
                         method='POST')
Пример #16
0
def move(request, topic_id):
    topic = get_object_or_404(Topic, pk=topic_id)
    form = CommentMoveForm(topic=topic, data=request.POST)

    if form.is_valid():
        comments = form.save()

        for comment in comments:
            comment_posted(comment=comment, mentions=None)
            topic.decrease_comment_count()
            post_comment_move(comment=comment, topic=topic)
    else:
        messages.error(request, render_form_errors(form))

    return safe_redirect(request, 'next', topic.get_absolute_url(), method='POST')
Пример #17
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
            default_url = lambda: (Comment
                .get_last_for_topic(topic_id)
                .get_absolute_url())
            return safe_redirect(request, 'next', default_url, method='POST')

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

    return render(
        request=request,
        template_name='spirit/comment/publish.html',
        context={
            'form': form,
            'topic': topic})
Пример #18
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
                  })
Пример #19
0
def delete_access(request, pk):
    topic_private = TopicPrivate.objects.for_delete_or_404(pk, request.user)

    if request.method == 'POST':
        topic_private.delete()

        if request.user.pk == topic_private.user_id:
            return redirect(reverse("spirit:topic:private:index"))

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

    return render(
        request=request,
        template_name='spirit/topic/private/delete.html',
        context={'topic_private': topic_private})
Пример #20
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})
Пример #21
0
def resend_activation_email(request):
    if request.user.is_authenticated:
        return safe_redirect(request, '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})
Пример #22
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 safe_redirect(request,
                             'next',
                             topic.get_absolute_url(),
                             method='POST')
    return render(request=request,
                  template_name='spirit/topic/update.html',
                  context={'form': form})
Пример #23
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})
Пример #24
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 is_ajax(request):
            url = reverse('spirit:comment:like:create',
                          kwargs={'comment_id': like.comment.pk})
            return json_response({
                'url_create': url,
            })

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

    return render(request=request,
                  template_name='spirit/comment/like/delete.html',
                  context={'like': like})
Пример #25
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})
Пример #26
0
def register(request, registration_form=RegistrationForm):
    if request.user.is_authenticated:
        return safe_redirect(request, '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 safe_redirect(request, '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})
Пример #27
0
    def wrapper(request, *args, **kwargs):
        if request.user.is_authenticated:
            return safe_redirect(request, 'next', request.user.st.get_absolute_url())

        return view_func(request, *args, **kwargs)