Les forums (forum/)

Module situé dans zds/forum/.

Modèles (models.py)

class zds.forum.models.Category(*args, **kwargs)

A Category is a simple container for Forums. There is no kind of logic in a Category. It simply here for Forum presentation in a predefined order.

exception DoesNotExist
exception MultipleObjectsReturned
get_forums(user, with_count=False)

get all forums that user can access

Parameters:
  • user (User) – the related user
  • with_count (bool) – If true will preload thread and post number for each forum of this category
Returns:

All forums in category, ordered by forum’s position in category

Return type:

list[Forum]

class zds.forum.models.Forum(*args, **kwargs)

A Forum, containing Topics. It can be public or restricted to some groups.

exception DoesNotExist
exception MultipleObjectsReturned
can_read(user)

Checks if a user can read current forum. The forum can be read if: - The forum has no access restriction (= no group), or - the user is in our database and is part of the restricted group which is needed to access this forum :param user: the user to check the rights :return: True if the user can read this forum, False otherwise.

get_last_message()
Returns:the last message on the forum, if there are any.
get_post_count()

Retrieve or aggregate the number of posts in this forum. If this number already exists, it must be stored in post_count. Otherwise it will process a SQL query.

Returns:the number of posts for a forum.
get_topic_count()

Retrieve or aggregate the number of threads in this forum. If this number already exists, it must be stored in thread_count. Otherwise it will process a SQL query.

Returns:the number of threads in the forum.
has_group

Checks if this forum belongs to at least one group

Returns:True if it belongs to at least one group
Return type:bool
class zds.forum.models.Post(*args, **kwargs)

A forum post written by a user. A post can be marked as useful: topic’s author (or admin) can declare any topic as “useful”, and this post is displayed as is on front.

exception DoesNotExist
exception MultipleObjectsReturned
get_absolute_url()
Returns:the absolute URL for this post, including page in the topic.
classmethod get_es_django_indexable(force_reindexing=False)

Overridden to prefetch stuffs

get_es_document_source(excluded_fields=None)

Overridden to handle the information of the topic

classmethod get_es_mapping()

Overridden to add pk into mapping.

Returns:mapping object
Return type:elasticsearch_dsl.Mapping
hide_comment_by_user(user, text_hidden)

Overridden to directly hide the post in ES as well

class zds.forum.models.Topic(*args, **kwargs)

A Topic is a thread of posts. A topic has several states, witch are all independent: - Solved: it was a question, and this question has been answered. The “solved” state is set at author’s discretion. - Locked: none can write on a locked topic. - Sticky: sticky topics are displayed on top of topic lists (ex: on forum page).

exception DoesNotExist
exception MultipleObjectsReturned
add_tags(tag_collection)

Add all tags contained in tag_collection to this topic. If a tag is unknown, it is added to the system. :param tag_collection: A collection of tags.

antispam(user=None)

Check if the user is allowed to post in a topic according to the ZDS_APP[‘forum’][‘spam_limit_seconds’] value. The user can always post if someone else has posted last. If the user is the last poster and there is less than ZDS_APP[‘forum’][‘spam_limit_seconds’] since the last post, the anti-spam is active and the user cannot post. :param user: A user. If undefined, the current user is used. :return: True if the anti-spam is active (user can’t post), False otherwise.

first_post()
Returns:the first post of a topic, written by topic’s author.
first_unread_post(user=None)

Returns the first post of this topics the current user has never read, or the first post if it has never read this topic. Used in notification menu.

Returns:The first unread post for this topic and this user.
classmethod get_es_django_indexable(force_reindexing=False)

Overridden to prefetch tags and forum

get_es_document_source(excluded_fields=None)

Overridden to handle the case of tags (M2M field)

classmethod get_es_mapping()

Overridden to add pk into mapping.

Returns:mapping object
Return type:elasticsearch_dsl.Mapping
get_last_answer()

Gets the last answer in this tread, if any. Note the first post is not considered as an answer, therefore a topic with a single post (the 1st one) will return None. :return: the last answer in the thread, if any.

get_last_post()
Returns:the last post in the thread.
get_post_count()
Returns:the number of posts in the topic.
last_read_post()

Returns the last post the current user has read in this topic. If it has never read this topic, returns the first post. Used in “last read post” balloon (base.html line 91). :return: the last post the user has read.

old_post_warning()

Check if the last message was written a long time ago according to ZDS_APP[‘forum’][‘old_post_limit_days’] value.

Returns:True if the post is old (users are warned), False otherwise.
resolve_last_post_pk_and_pos_read_by_user(user)

get the primary key and position of the last post the user read

Parameters:user – the current (authenticated) user. Please do not try with unauthenticated user, il would lead to a useless request.
Returns:the primary key
Return type:int
resolve_last_read_post_absolute_url()

resolve the url that leads to the last post the current user has read. If current user is anonymous, just lead to the thread start.

Returns:the url
Return type:str
save(*args, **kwargs)

Overridden to handle the displacement of the topic to another forum

class zds.forum.models.TopicRead(*args, **kwargs)

This model tracks the last post read in a topic by a user. Technically it is a simple joint [user, topic, last read post].

exception DoesNotExist
exception MultipleObjectsReturned
zds.forum.models.delete_post_in_elasticsearch(sender, instance, **kwargs)

catch the pre_delete signal to ensure the deletion in ES

zds.forum.models.delete_topic_in_elasticsearch(sender, instance, **kwargs)

catch the pre_delete signal to ensure the deletion in ES

zds.forum.models.is_read(topic, user=None)

Checks if the user has read the last post of the topic. Returns false if the user read the topic except its last post. Technically this is done by checking if the user has a TopicRead object for the last post of this topic. :param topic: A topic :param user: A user. If undefined, the current user is used. :return:

zds.forum.models.mark_read(topic, user=None)

Mark the last message of a topic as read for the current user. :param topic: A topic.

Les managers (managers.py)

class zds.forum.managers.ForumManager

Custom forum manager.

get_public_forums_of_category(category, with_count=False)

load all public forums for a category

Parameters:
  • category (zds.forum.models.Category) – the related category
  • with_count (bool) – optional parameter: if true, will preload thread and post number for each forum inside category
class zds.forum.managers.PostManager

Custom post manager.

visibility_check_query(current_user)

Build a subquery that checks if a post is readable by current user :param current_user: :return:

class zds.forum.managers.TopicManager

Custom topic manager.

get_last_topics()

Get last posted topics and prefetch some related properties. Depends on settings.ZDS_APP[‘topic’][‘home_number’] :return: :rtype: django.models.Queryset

last_topics_of_a_member(author, user)

Gets last topics of a member but exclude all topics not accessible for the request user. :param author: Author of topics. :param user: Request user. :return: List of topics.

visibility_check_query(current_user)

Build a subquery that checks if a topic is readable by current user :param current_user: :return:

Vues (views.py)

class zds.forum.views.CategoriesForumsListView(**kwargs)
get_context_data(**kwargs)

Get the context for this view.

class zds.forum.views.CategoryForumsDetailView(**kwargs)
get_context_data(**kwargs)

Insert the single object into the context dict.

class zds.forum.views.FindPost(**kwargs)
get_context_data(**kwargs)

Get the context for this view. This method is surcharged to modify the paginator and information given at the template.

get_object(queryset=None)

Returns the object the view is displaying.

By default this requires self.queryset and a pk or slug argument in the URLconf, but subclasses can override this to return any object.

get_queryset()

Return the list of items for this view.

The return value must be an iterable and may be an instance of QuerySet in which case QuerySet specific behavior will be enabled.

class zds.forum.views.FindTopic(**kwargs)
get_context_data(**kwargs)

Get the context for this view. This method is surcharged to modify the paginator and information given at the template.

get_object(queryset=None)

Returns the object the view is displaying.

By default this requires self.queryset and a pk or slug argument in the URLconf, but subclasses can override this to return any object.

get_queryset()

Return the list of items for this view.

The return value must be an iterable and may be an instance of QuerySet in which case QuerySet specific behavior will be enabled.

class zds.forum.views.FindTopicByTag(**kwargs)
filter_queryset(queryset, filter_param)

Filter the queryset queryset, given the selected filter_param. Default implementation does no filtering at all.

get_context_data(*args, **kwargs)

Get the context for this view. This method is surcharged to modify the paginator and information given at the template.

get_object(queryset=None)

Returns the object the view is displaying.

By default this requires self.queryset and a pk or slug argument in the URLconf, but subclasses can override this to return any object.

get_queryset()

Return the list of items for this view.

The return value must be an iterable and may be an instance of QuerySet in which case QuerySet specific behavior will be enabled.

class zds.forum.views.ForumTopicsListView(**kwargs)
filter_queryset(queryset, filter_param)

Filter the queryset queryset, given the selected filter_param. Default implementation does no filtering at all.

get(request, *args, **kwargs)

Handles GET requests and instantiates a blank version of the form.

get_context_data(**kwargs)

Get the context for this view. This method is surcharged to modify the paginator and information given at the template.

get_object(queryset=None)

Returns the object the view is displaying.

By default this requires self.queryset and a pk or slug argument in the URLconf, but subclasses can override this to return any object.

get_queryset()

Return the list of items for this view.

The return value must be an iterable and may be an instance of QuerySet in which case QuerySet specific behavior will be enabled.

post(request, *args, **kwargs)

Handles POST requests, instantiating a form instance with the passed POST variables and then checked for validity.

class zds.forum.views.LastTopicsViewTests(**kwargs)
get_queryset()

Return the list of items for this view.

The return value must be an iterable and may be an instance of QuerySet in which case QuerySet specific behavior will be enabled.

class zds.forum.views.ManageGitHubIssue(**kwargs)
post(request, *args, **kwargs)

Handles POST requests, instantiating a form instance with the passed POST variables and then checked for validity.

class zds.forum.views.PostEdit(**kwargs)
form_class

alias of zds.forum.forms.PostForm

form_valid(form)

If the form is valid, save the associated model.

get(request, *args, **kwargs)

Handles GET requests and instantiates a blank version of the form.

get_form(form_class=<class 'zds.forum.forms.PostForm'>)

Returns an instance of the form to be used in this view.

post(request, *args, **kwargs)

Handles POST requests, instantiating a form instance with the passed POST variables and then checked for validity.

class zds.forum.views.PostNew(**kwargs)
form_class

alias of zds.forum.forms.PostForm

form_valid(form)

If the form is valid, save the associated model.

get_form(form_class=<class 'zds.forum.forms.PostForm'>)

Returns an instance of the form to be used in this view.

get_object(queryset=None)

Returns the object the view is displaying.

By default this requires self.queryset and a pk or slug argument in the URLconf, but subclasses can override this to return any object.

model_quote

alias of zds.forum.models.Post

class zds.forum.views.PostSignal(**kwargs)
post(request, *args, **kwargs)

Handles POST requests, instantiating a form instance with the passed POST variables and then checked for validity.

class zds.forum.views.PostUnread(**kwargs)
get(request, *args, **kwargs)

Handles GET requests and instantiates a blank version of the form.

class zds.forum.views.PostUseful(**kwargs)
post(request, *args, **kwargs)

Handles POST requests, instantiating a form instance with the passed POST variables and then checked for validity.

class zds.forum.views.TopicEdit(**kwargs)
form_class

alias of zds.forum.forms.TopicForm

form_valid(form)

If the form is valid, save the associated model.

get(request, *args, **kwargs)

Handles GET requests and instantiates a blank version of the form.

get_form(form_class=<class 'zds.forum.forms.TopicForm'>)

Returns an instance of the form to be used in this view.

get_object(queryset=None)

Returns the object the view is displaying.

By default this requires self.queryset and a pk or slug argument in the URLconf, but subclasses can override this to return any object.

post(request, *args, **kwargs)

Handles POST requests, instantiating a form instance with the passed POST variables and then checked for validity.

class zds.forum.views.TopicNew(**kwargs)
form_class

alias of zds.forum.forms.TopicForm

form_valid(form)

If the form is valid, save the associated model.

get(request, *args, **kwargs)

Handles GET requests and instantiates a blank version of the form.

get_form(form_class=<class 'zds.forum.forms.TopicForm'>)

Returns an instance of the form to be used in this view.

get_object(queryset=None)

Returns the object the view is displaying.

By default this requires self.queryset and a pk or slug argument in the URLconf, but subclasses can override this to return any object.

post(request, *args, **kwargs)

Handles POST requests, instantiating a form instance with the passed POST variables and then checked for validity.

class zds.forum.views.TopicPostsListView(**kwargs)
get_context_data(**kwargs)

Get the context for this view. This method is surcharged to modify the paginator and information given at the template.

get_object(queryset=None)

Returns the object the view is displaying.

By default this requires self.queryset and a pk or slug argument in the URLconf, but subclasses can override this to return any object.

get_queryset()

Return the list of items for this view.

The return value must be an iterable and may be an instance of QuerySet in which case QuerySet specific behavior will be enabled.