def post_rollback(request, diff_id): if not request.user.profile.can_edit_topic(): return error(request, "TOPIC_EDIT") diff = get_object_or_404(PostEdit, pk=diff_id) if not diff.post.owner == request.user: raise Http404 PostEdit( post=diff.post, user=request.user, old_text=diff.post.text, new_text=diff.old_text ).save() request.user.profile.use_force("FORUM_CREATE") request.user.profile.save() post = diff.post post.text = diff.old_text post.save() return thread(request, post.pk)
def reply(request, post_id): reply_to = get_object_or_404(Post, pk=post_id) if reply_to.thread.closed: raise Http404 if reply_to.draft or reply_to.thread.draft: return error(request, "You can't comment draft's :)") if not request.user.profile.can_create_comment(): return error(request, "COMMENT_CREATE") if request.method == 'POST': form = PostForm(request.POST) if form.is_valid(): if request.POST['submit'] == _("Reply"): post = form.save(commit=False) post.reply_to = reply_to post.thread = post.reply_to.thread post.owner = request.user from taverna.parsers.templatetags.markup import markup post.text = markup(post.text, post.parser) post.save() request.user.profile.use_force("COMMENT_CREATE") request.user.profile.save() paginator = ExtendedPaginator( Post.objects.filter(thread=post.thread)[1:], settings.PAGE_LIMITATIONS["FORUM_COMMENTS"] ) last_page = paginator.num_pages return HttpResponseRedirect( "%s?offset=%s#post_%s" % ( reverse( "forum.views.thread", args=[post.thread.pk] ), last_page, post.pk ) ) else: form = PostForm() return { 'form': form, 'post': reply_to}
def topic_create(request, forum_id): if not request.user.profile.can_create_topic(): return error(request, "TOPIC_CREATE") forum = get_object_or_404(Forum, pk=forum_id) if request.method == 'POST': if request.user.is_staff: form = AdminThreadForm(request.POST) else: form = ThreadForm(request.POST) if form.is_valid(): if request.POST['submit'] == _("Post new topic"): post = form.save(commit = False) post.forum = forum post.owner = request.user post.save() split_str = re.split('\[(.*?)\]', post.title) for name in split_str[1:-1]: if name: try: post.tags.add(Tag.objects.get(name=name)) except Tag.DoesNotExist: tag = Tag(name=name) tag.save() post.tags.add(tag) post.title = split_str[-1] post.thread = post post.save() request.user.profile.use_force("TOPIC_CREATE") request.user.profile.save() return HttpResponseRedirect( reverse('forum.views.forum', args=[forum.pk]) ) else: if request.user.is_staff: form = AdminThreadForm() else: form = ThreadForm() form.exclude = ( 'tags', 'blog', 'reply_to', 'thread', 'flags', 'solved', 'sticked' ) return { 'form': form, 'forum': forum, 'blog_info': True }
def topic_edit(request, topic_id): if not request.user.profile.can_edit_topic(): return error(request, "TOPIC_EDIT") topic = get_object_or_404(Post, pk=topic_id) if not topic.reply_to == None: raise Http404 if not request.user.is_staff: if not topic.owner == request.user: raise Http404 if request.method == 'POST': if request.user.is_staff: form = AdminThreadForm(request.POST, instance=topic) else: form = ThreadForm(request.POST, instance=topic) if form.is_valid(): if request.POST['submit'] == _("Save"): orig_text = Post.objects.get(pk=topic_id).text post = form.save() if orig_text != post.text: PostEdit( post=topic, user=request.user, old_text=orig_text, new_text=post.text ).save() request.user.profile.use_force("TOPIC_EDIT") request.user.profile.save() return HttpResponseRedirect( reverse('forum.views.thread', args=[topic_id]) ) else: if request.user.is_staff: form = AdminThreadForm(instance=topic) else: form = ThreadForm(instance=topic) return {'form': form, 'blog_info': True}
def forum_create(request): if not request.user.profile.can_create_forum(): return error(request, "FORUM_CREATE") if request.method == 'POST': form = ForumForm(request.POST) if form.is_valid(): forum = form.save(commit=False) forum.owner = request.user forum.save() request.user.profile.use_force("FORUM_CREATE") request.user.profile.save() return HttpResponseRedirect(reverse(index)) return {'form': ForumForm()}
def profile_edit(request): from blog.views import error if not request.user.profile.can_edit_profile(): return error(request, "PROFILE_EDIT") profile = request.user.get_profile() class SettingsForm(ModelForm): class Meta: model = Profile if profile.visible_name: fields = ( 'theme', 'jabber', 'website', 'location', 'sign' ) else: fields = ( 'visible_name', 'theme', 'jabber', 'website', 'location', 'sign' ) def save(self, **args): profile = super(SettingsForm, self).save(commit=False, **args) if request.POST['email']: mailhash = md5(request.POST['email']).hexdigest() profile.photo = mailhash profile.save() request.user.profile.use_force("PROFILE_EDIT") request.user.profile.save() try: q = self.cleaned_data["visible_name"] except KeyError: pass else: blog = Blog.objects.filter(owner=request.user.id)[:1][0] blog.name = profile.visible_name blog.save() class UserSettingsForm(ModelForm): class Meta: model = User exclude = ( 'username', 'password', 'is_staff', 'is_active', 'is_superuser', 'groups', 'user_permissions', 'last_login', 'date_joined' ) if request.method == 'POST': formProfile = SettingsForm(request.POST, instance=profile) formUser = UserSettingsForm(request.POST, instance=request.user) if formUser.is_valid() and formProfile.is_valid(): formUser.save() formProfile.save() return HttpResponseRedirect( reverse( "userauth.views.profile_view", args=[request.user.id] ) ) else: formProfile = SettingsForm(instance=profile) formUser = UserSettingsForm(instance=request.user) return {'formProfile': formProfile, 'formUser': formUser}
def scourge(request, post_id): if not request.user.is_staff: raise Http404 if not request.user.is_active: return error(request, "") startpost = get_object_or_404(Post, pk=post_id) thread_id = startpost.thread.pk forum = startpost.forum blog = startpost.blog class RemoveForm(forms.ModelForm): class Meta: model = PostVote exclude = ('post', 'user', 'positive') def clean_reason(self): reason = self.cleaned_data['reason'] if reason == None: raise forms.ValidationError(_("Valid reason required.")) if reason.cost == 0: return reason try: postvote = PostVote.objects.get(post=post_id, user=1) except: postvote = None if postvote: raise forms.ValidationError( _("You can't scourge post twice :]") ) return reason def save(self, **args): if self.cleaned_data['reason'].cost == 0: auto_remove(startpost, self.cleaned_data['reason']) PostVote.objects.filter(post = startpost).delete() PostEdit.objects.filter(post = startpost).delete() startpost.delete() else: postvote = super(RemoveForm, self).save(commit=False, **args) postvote.post = startpost postvote.user = User.objects.get(pk=1) postvote.positive = False postvote.auto = False postvote.save() modify_rating(startpost, postvote.reason.cost) if startpost != startpost.thread: auto_remove(startpost, postvote.reason) if request.method == 'POST': form = RemoveForm(request.POST) form.fields['reason'].empty_label = None if form.is_valid(): form.save() try: thread = Post.objects.get(pk=thread_id) except: thread = None if thread: offset = request.GET.get("offset", 1) if startpost: return HttpResponseRedirect( "%s?offset=%s&showall=1#post_%s" % ( reverse( 'forum.views.thread', args=[thread.pk] ), offset, startpost.pk ) ) else: return HttpResponseRedirect( "%s?offset=%s&showall=1" % ( reverse( 'forum.views.thread', args=[thread.pk] ), offset ) ) else: if forum: return HttpResponseRedirect( reverse( 'forum.views.forum', args=[forum.pk] ) ) else: return HttpResponseRedirect( reverse( 'blog.views.view', args=[blog.pk] ) ) else: form = RemoveForm() form.fields['reason'].empty_label = None if startpost.reply_to: return { 'post': startpost, 'form': form } else: return { 'startpost': startpost, 'form': form }