コード例 #1
0
ファイル: views.py プロジェクト: brezerk/taverna
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)
コード例 #2
0
ファイル: views.py プロジェクト: brezerk/taverna
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}
コード例 #3
0
ファイル: views.py プロジェクト: brezerk/taverna
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
    }
コード例 #4
0
ファイル: views.py プロジェクト: brezerk/taverna
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}
コード例 #5
0
ファイル: views.py プロジェクト: brezerk/taverna
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()}
コード例 #6
0
ファイル: views.py プロジェクト: brezerk/taverna
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}
コード例 #7
0
ファイル: views.py プロジェクト: brezerk/taverna
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 }