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