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 })
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})
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')
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 })
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')
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')
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})
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)
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})
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())
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})
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')
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')
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')
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')
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')
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})
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 })
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})
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})
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})
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})
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})
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})
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})
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})
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)