コード例 #1
0
    def action_label(self, request, threads, label_slug):
        for label in self.forum.labels:
            if label.slug == label_slug:
                break
        else:
            raise moderation.ModerationError(self.invalid_action_message)

        changed_threads = 0
        for thread in threads:
            if moderation.label_thread(request.user, thread, label):
                changed_threads += 1

        if changed_threads:
            message = ungettext(
                '%(changed)d thread was labeled "%(label)s".',
                '%(changed)d threads were labeled "%(label)s".',
                changed_threads)
            messages.success(
                request, message % {
                    'changed': changed_threads,
                    'label': label.name
                })
        else:
            message = _("No threads were labeled.")
            messages.info(request, message)
コード例 #2
0
ファイル: actions.py プロジェクト: vfoss-org/Misago
    def action_merge(self, request, threads):
        if len(threads) == 1:
            message = _("You have to select at least two threads to merge.")
            raise moderation.ModerationError(message)

        form = MergeThreadsForm()

        if 'submit' in request.POST:
            form = MergeThreadsForm(request.POST)
            if form.is_valid():
                with atomic():
                    merged_thread = Thread()
                    merged_thread.forum = self.forum
                    merged_thread.set_title(
                        form.cleaned_data['merged_thread_title'])
                    merged_thread.starter_name = "-"
                    merged_thread.starter_slug = "-"
                    merged_thread.last_poster_name = "-"
                    merged_thread.last_poster_slug = "-"
                    merged_thread.started_on = timezone.now()
                    merged_thread.last_post_on = timezone.now()
                    merged_thread.is_pinned = max(t.is_pinned for t in threads)
                    merged_thread.is_closed = max(t.is_closed for t in threads)
                    merged_thread.save()

                    for thread in threads:
                        moderation.merge_thread(
                            request.user, merged_thread, thread)

                    merged_thread.synchronize()
                    merged_thread.save()

                    self.forum.lock()
                    self.forum.synchronize()
                    self.forum.save()

                changed_threads = len(threads)
                message = ungettext(
                    '%(changed)d thread was merged into "%(thread)s".',
                    '%(changed)d threads were merged into "%(thread)s".',
                changed_threads)
                messages.success(request, message % {
                    'changed': changed_threads,
                    'thread': merged_thread.title
                })

                return None # trigger threads list refresh

        if request.is_ajax():
            template = self.merge_threads_modal_template
        else:
            template = self.merge_threads_full_template

        return render(request, template, {
            'form': form,
            'forum': self.forum,
            'path': get_forum_path(self.forum),
            'threads': threads
        })
コード例 #3
0
ファイル: threadactions.py プロジェクト: vfoss-org/Misago
    def action_label(self, request, thread, label_slug):
        for label in self.forum.labels:
            if label.slug == label_slug:
                break
        else:
            raise moderation.ModerationError(self.invalid_action_message)

        moderation.label_thread(request.user, thread, label)
        message = _('Thread was labeled "%(label)s".')
        messages.success(request, message % {'label': label.name})
コード例 #4
0
ファイル: postsactions.py プロジェクト: vfoss-org/Misago
    def action_move(self, request, posts):
        if posts[0].id == self.thread.first_post_id:
            message = _("You can't move thread's first post.")
            raise moderation.ModerationError(message)

        form = MovePostsForm(user=request.user, thread=self.thread)

        if 'submit' in request.POST or 'follow' in request.POST:
            form = MovePostsForm(request.POST,
                                 user=request.user,
                                 thread=self.thread)
            if form.is_valid():
                for post in posts:
                    post.move(form.new_thread)
                    post.save()

                form.new_thread.lock()
                form.new_thread.synchronize()
                form.new_thread.save()

                if form.new_thread.forum != self.forum:
                    form.new_thread.forum.lock()
                    form.new_thread.forum.synchronize()
                    form.new_thread.forum.save()

                changed_posts = len(posts)
                message = ungettext(
                    '%(changed)d post was moved to "%(thread)s".',
                    '%(changed)d posts were moved to "%(thread)s".',
                changed_posts)
                messages.success(request, message % {
                    'changed': changed_posts,
                    'thread': form.new_thread.title
                })

                if 'follow' in request.POST:
                    return redirect(form.new_thread.get_absolute_url())
                else:
                    return None # trigger thread refresh

        if request.is_ajax():
            template = self.move_posts_modal_template
        else:
            template = self.move_posts_full_template

        return render(request, template, {
            'form': form,
            'forum': self.forum,
            'thread': self.thread,
            'path': get_forum_path(self.forum),

            'posts': posts
        })
コード例 #5
0
ファイル: postsactions.py プロジェクト: vfoss-org/Misago
    def action_merge(self, request, posts):
        first_post = posts[0]

        changed_posts = len(posts)
        if changed_posts < 2:
            message = _("You have to select at least two posts to merge.")
            raise moderation.ModerationError(message)

        for post in posts:
            if not post.poster_id or first_post.poster_id != post.poster_id:
                message = _("You can't merge posts made by different authors.")
                raise moderation.ModerationError(message)

        for post in posts[1:]:
            post.merge(first_post)
            post.delete()

        first_post.save()

        message = ungettext(
            '%(changed)d post was merged.',
            '%(changed)d posts were merged.',
        changed_posts)
        messages.success(request, message % {'changed': changed_posts})
コード例 #6
0
ファイル: postsactions.py プロジェクト: vfoss-org/Misago
    def action_split(self, request, posts):
        if posts[0].id == self.thread.first_post_id:
            message = _("You can't split thread's first post.")
            raise moderation.ModerationError(message)

        form = SplitThreadForm(acl=request.user.acl)

        if 'submit' in request.POST or 'follow' in request.POST:
            form = SplitThreadForm(request.POST, acl=request.user.acl)
            if form.is_valid():
                split_thread = Thread()
                split_thread.forum = form.cleaned_data['forum']
                split_thread.set_title(
                    form.cleaned_data['thread_title'])
                split_thread.starter_name = "-"
                split_thread.starter_slug = "-"
                split_thread.last_poster_name = "-"
                split_thread.last_poster_slug = "-"
                split_thread.started_on = timezone.now()
                split_thread.last_post_on = timezone.now()
                split_thread.save()

                for post in posts:
                    post.move(split_thread)
                    post.save()

                split_thread.synchronize()
                split_thread.save()

                if split_thread.forum != self.forum:
                    split_thread.forum.lock()
                    split_thread.forum.synchronize()
                    split_thread.forum.save()

                changed_posts = len(posts)
                message = ungettext(
                    '%(changed)d post was split to "%(thread)s".',
                    '%(changed)d posts were split to "%(thread)s".',
                changed_posts)
                messages.success(request, message % {
                    'changed': changed_posts,
                    'thread': split_thread.title
                })

                if 'follow' in request.POST:
                    return redirect(split_thread.get_absolute_url())
                else:
                    return None # trigger thread refresh

        if request.is_ajax():
            template = self.split_thread_modal_template
        else:
            template = self.split_thread_full_template

        return render(request, template, {
            'form': form,
            'forum': self.forum,
            'thread': self.thread,
            'path': get_forum_path(self.forum),

            'posts': posts
        })