def split_posts_to_new_thread(request, thread, validated_data): new_thread = Thread( category=validated_data['category'], started_on=thread.started_on, last_post_on=thread.last_post_on, ) new_thread.set_title(validated_data['title']) new_thread.save() for post in validated_data['posts']: post.move(new_thread) post.save() thread.synchronize() thread.save() new_thread.synchronize() new_thread.save() if validated_data.get('weight') == Thread.WEIGHT_GLOBAL: moderation.pin_thread_globally(request, new_thread) elif validated_data.get('weight'): moderation.pin_thread_locally(request, new_thread) if validated_data.get('is_hidden', False): moderation.hide_thread(request, new_thread) if validated_data.get('is_closed', False): moderation.close_thread(request, new_thread) thread.category.synchronize() thread.category.save() if new_thread.category != thread.category: new_thread.category.synchronize() new_thread.category.save()
def split_posts_to_new_thread(request, thread, validated_data, posts): new_thread = Thread( category=validated_data['category'], started_on=thread.started_on, last_post_on=thread.last_post_on, ) new_thread.set_title(validated_data['title']) new_thread.save() for post in posts: post.move(new_thread) post.save() thread.synchronize() thread.save() new_thread.synchronize() new_thread.save() if validated_data.get('weight') == Thread.WEIGHT_GLOBAL: moderation.pin_thread_globally(request, new_thread) elif validated_data.get('weight'): moderation.pin_thread_locally(request, new_thread) if validated_data.get('is_hidden', False): moderation.hide_thread(request, new_thread) if validated_data.get('is_closed', False): moderation.close_thread(request, new_thread) thread.category.synchronize() thread.category.save() if new_thread.category != thread.category: new_thread.category.synchronize() new_thread.category.save()
def merge_threads(request, validated_data, threads, poll): new_thread = Thread(category=validated_data['category'], started_on=threads[0].started_on, last_post_on=threads[0].last_post_on) new_thread.set_title(validated_data['title']) new_thread.save() if poll: poll.move(new_thread) categories = [] for thread in threads: categories.append(thread.category) new_thread.merge(thread) thread.delete() record_event(request, new_thread, 'merged', { 'merged_thread': thread.title, }, commit=False) new_thread.synchronize() new_thread.save() if validated_data.get('weight') == Thread.WEIGHT_GLOBAL: moderation.pin_thread_globally(request, new_thread) elif validated_data.get('weight'): moderation.pin_thread_locally(request, new_thread) if validated_data.get('is_hidden', False): moderation.hide_thread(request, new_thread) if validated_data.get('is_closed', False): moderation.close_thread(request, new_thread) if new_thread.category not in categories: categories.append(new_thread.category) for category in categories: category.synchronize() category.save() # set extra attrs on thread for UI new_thread.is_read = False new_thread.subscription = None # add top category to thread if validated_data.get('top_category'): categories = list(Category.objects.all_categories().filter( id__in=request.user.acl['visible_categories'])) add_categories_to_items(validated_data['top_category'], categories, [new_thread]) else: new_thread.top_category = None add_acl(request.user, new_thread) return new_thread
def merge_threads(request, validated_data, threads, poll): new_thread = Thread( category=validated_data['category'], started_on=threads[0].started_on, last_post_on=threads[0].last_post_on, ) new_thread.set_title(validated_data['title']) new_thread.save() if poll: poll.move(new_thread) categories = [] for thread in threads: categories.append(thread.category) new_thread.merge(thread) thread.delete() record_event( request, new_thread, 'merged', { 'merged_thread': thread.title, }, commit=False, ) new_thread.synchronize() new_thread.save() if validated_data.get('weight') == Thread.WEIGHT_GLOBAL: moderation.pin_thread_globally(request, new_thread) elif validated_data.get('weight'): moderation.pin_thread_locally(request, new_thread) if validated_data.get('is_hidden', False): moderation.hide_thread(request, new_thread) if validated_data.get('is_closed', False): moderation.close_thread(request, new_thread) if new_thread.category not in categories: categories.append(new_thread.category) for category in categories: category.synchronize() category.save() # set extra attrs on thread for UI new_thread.is_read = False new_thread.subscription = None add_acl(request.user, new_thread) return new_thread
def patch_weight(request, thread, value): allow_pin_thread(request.user, thread) if not thread.acl.get('can_pin_globally') and thread.weight == 2: raise PermissionDenied(_("You can't change globally pinned threads weights in this category.")) if value == 2: if thread.acl.get('can_pin_globally'): moderation.pin_thread_globally(request, thread) else: raise PermissionDenied(_("You can't pin threads globally in this category.")) elif value == 1: moderation.pin_thread_locally(request, thread) elif value == 0: moderation.unpin_thread(request, thread) return {'weight': thread.weight}
def patch_weight(request, thread, value): message = _("You don't have permission to change this thread's weight.") if not thread.acl.get('can_pin'): raise PermissionDenied(message) elif thread.weight > thread.acl.get('can_pin'): raise PermissionDenied(message) if value == 2: if thread.acl.get('can_pin') == 2: moderation.pin_thread_globally(request, thread) else: raise PermissionDenied(_("You don't have permission to pin this thread globally.")) elif value == 1: moderation.pin_thread_locally(request, thread) elif value == 0: moderation.unpin_thread(request, thread) return {'weight': thread.weight}
def patch_weight(request, thread, value): message = _("You don't have permission to change this thread's weight.") if not thread.acl.get('can_pin'): raise PermissionDenied(message) elif thread.weight > thread.acl.get('can_pin'): raise PermissionDenied(message) if value == 2: if thread.acl.get('can_pin') == 2: moderation.pin_thread_globally(request.user, thread) else: raise PermissionDenied( _("You don't have permission to pin this thread globally.")) elif value == 1: moderation.pin_thread_locally(request.user, thread) elif value == 0: moderation.unpin_thread(request.user, thread) return {'weight': thread.weight}
def patch_weight(request, thread, value): allow_pin_thread(request.user, thread) if not thread.acl.get('can_pin_globally') and thread.weight == 2: raise PermissionDenied( _("You can't change globally pinned threads weights in this category." )) if value == 2: if thread.acl.get('can_pin_globally'): moderation.pin_thread_globally(request, thread) else: raise PermissionDenied( _("You can't pin threads globally in this category.")) elif value == 1: moderation.pin_thread_locally(request, thread) elif value == 0: moderation.unpin_thread(request, thread) return {'weight': thread.weight}
def threads_merge_endpoint(request): serializer = MergeThreadsSerializer( data=request.data, context={'user': request.user}, ) serializer.is_valid(raise_exception=True) data = serializer.validated_data threads = data['threads'] poll = data['poll'] new_thread = Thread( category=data['category'], started_on=threads[0].started_on, last_post_on=threads[0].last_post_on, ) new_thread.set_title(data['title']) new_thread.save() if poll: poll.move(new_thread) categories = [] for thread in threads: categories.append(thread.category) new_thread.merge(thread) thread.delete() record_event( request, new_thread, 'merged', {'merged_thread': thread.title}, commit=False, ) new_thread.synchronize() new_thread.save() if data.get('weight') == Thread.WEIGHT_GLOBAL: moderation.pin_thread_globally(request, new_thread) elif data.get('weight'): moderation.pin_thread_locally(request, new_thread) if data.get('is_hidden', False): moderation.hide_thread(request, new_thread) if data.get('is_closed', False): moderation.close_thread(request, new_thread) if new_thread.category not in categories: categories.append(new_thread.category) for category in categories: category.synchronize() category.save() # set extra attrs on thread for UI new_thread.is_read = False new_thread.subscription = None add_acl(request.user, new_thread) return Response(ThreadsListSerializer(new_thread).data)