""" Return the link to the user's twitter account. """ return 'https://twitter.com/%s' % urlquote_plus(self.twitter_name) def _redo_profile_text_rendering(sender, **kwargs): """ Redo text rendering of all user profiles. :param sender: Not used. :param kwargs: Not used. """ for profile in UserProfile.objects.all(): profile.render_text(save=True) render_engine_changed.connect(_redo_profile_text_rendering) def set_preferred_language_and_timezone(user, request): """ Set the preferred language and timezone of the current user session. :param user: The currently logged-in user. :param request: The current request instance. """ user_profile = user.user_profile # Activate timezone for the current thread, and store value for any future requests user_timezone = user_profile.timezone timezone.activate(user_timezone) request.session[TIMEZONE_SESSION_KEY] = user_timezone.zone
allow_quotes=True, allow_footnotes=True, allow_acronyms=True, allow_links=True, allow_medias=True, allow_cdm_extra=True, force_nofollow=False, render_text_version=True, merge_footnotes_html=True, merge_footnotes_text=True) self.description_html = content_html self.description_text = content_text # Save if required if save: # Avoid infinite loop by calling directly super.save super(License, self).save(update_fields=('description_html', 'description_text')) def _redo_licenses_text_rendering(sender, **kwargs): """ Redo text rendering of all licenses. :param sender: Not used. :param kwargs: Not used. """ for license in License.objects.all(): license.render_description(save=True) render_engine_changed.connect(_redo_licenses_text_rendering)
# Save if required if save: # Avoid infinite loop by calling directly super.save super(Forum, self).save(update_fields=('description_html', 'description_text')) def _redo_forum_text_rendering(sender, **kwargs): """ Redo text rendering of all forums. :param sender: Not used. :param kwargs: Not used. """ for forum in Forum.objects.all(): forum.render_description(save=True) render_engine_changed.connect(_redo_forum_text_rendering) def update_child_forum_slug_hierarchy_on_parent_save(sender, instance, created, raw, using, update_fields, **kwargs): """ Update any child forum's slug hierarchy on parent save. :param sender: The Forum class. :param instance: The forum instance. :param created: True if the instance just been created. :param raw: True if the instance is saved as-is and should not be used. :param using: The database alias. :param update_fields: Not used. :param kwargs: Any extra keywords arguments. :return: None """
# Save if required if save: self.save_no_rendering(update_fields=('content_html', 'content_text')) def _redo_announcements_text_rendering(sender, **kwargs): """ Redo text rendering of all announcements. :param sender: Not used. :param kwargs: Not used. """ for announcement in Announcement.objects.all(): announcement.render_text(save=True) render_engine_changed.connect(_redo_announcements_text_rendering) class AnnouncementTag(models.Model): """ Announcement tag data model. An announcement's tag is made of: - a slug (unique and indexed in database), - a name (human readable). """ # FIXME AutoSlugField slug = models.SlugField(_('Slug'), max_length=255, unique=True)
# Save if required if save: # Avoid infinite loop by calling directly super.save super(IssueTicket, self).save(update_fields=('description_html', 'description_text')) def _redo_tickets_description_rendering(sender, **kwargs): """ Redo text rendering of all issue tickets. :param sender: Not used. :param kwargs: Not used. """ for ticket in IssueTicket.objects.all(): ticket.render_description(save=True) render_engine_changed.connect(_redo_tickets_description_rendering) class IssueComment(models.Model): """ Bug issue ticket's comment model (also called "issue update" by some developers). An issue comment is made of: - a related issue, related comments of an issue are available in the IssueTicket model using ``comments``. - an author, submitted ticket's comments are available in the User model using ``issues_comments``. - a publication date, - and finally the comment text. """ issue = models.ForeignKey(IssueTicket, db_index=True, # Database optimization editable=False,
allow_text_colors=True, allow_spoilers=True, allow_lists=True, allow_tables=True, allow_quotes=True, allow_acronyms=True, allow_links=True, allow_medias=True, allow_cdm_extra=True, force_nofollow=False, render_text_version=True) self.description_html = content_html self.description_text = content_text # Save if required if save: # Avoid infinite loop by calling directly super.save super(ImageAttachment, self).save(update_fields=('description_html', 'description_text')) def _redo_image_attachments_text_rendering(sender, **kwargs): """ Redo text rendering of all image attachments. :param sender: Not used. :param kwargs: Not used. """ for image in ImageAttachment.objects.all(): image.render_description(save=True) render_engine_changed.connect(_redo_image_attachments_text_rendering)
# Save if required if save: # Avoid infinite loop by calling directly super.save super(PrivateMessage, self).save(update_fields=('body_html', 'body_text')) def _redo_private_messages_text_rendering(sender, **kwargs): """ Redo text rendering of all private messages. :param sender: Not used. :param kwargs: Not used. """ for message in PrivateMessage.objects.all(): message.render_body(save=True) render_engine_changed.connect(_redo_private_messages_text_rendering) def notice_unread_messages_upon_login(sender, user, request, **kwargs): """ Add an INFO flash message upon user login if the user has unread messages. :param sender: Not used. :param user: The logged-in user. :param request: The current request. :param kwargs: Not used. :return: None """ unread_count = PrivateMessage.objects.inbox_count_for(user) if unread_count > 0: messages.add_message(request, messages.INFO, mark_safe( _('You have %(count)d unread private messages '