def markup(body, obj=None, context=None): for preprocessor in defaults.PYBB_MARKUP_PREPROCESSORS: body = load_class(preprocessor)(body, obj=obj).render() body = load_class(defaults.PYBB_MARKUP_ENGINE)(body, obj=obj).render(context) for postprocessor in defaults.PYBB_MARKUP_POSTPROCESSORS: body = load_class(postprocessor)(body, obj=obj).render() return body
def init_formatters(self): simple_formatters = list(self.simple_formatters.items()) + list(defaults.PYBB_BBCODE_MARKUP_SIMPLE_FORMATTERS) for tag_name, (format_str, context) in simple_formatters: if context: self.parser.add_simple_formatter(tag_name, format_str, **context) else: self.parser.add_simple_formatter(tag_name, format_str) formatters = list(self.formatters.items()) + list(defaults.PYBB_BBCODE_MARKUP_FORMATTERS) for tag_name, (formatter_name, context) in formatters: if context: self.parser.add_formatter(tag_name, load_class(formatter_name), **context) else: self.parser.add_formatter(tag_name, load_class(formatter_name))
def post(self, request, *args, **kwargs): try: topic = Topic.objects.get(pk=request.POST['topic_id']) post = topic.posts.filter_by_user(topic, request.user).get(pk=request.POST['post_id']) except (Topic.DoesNotExist, Post.DoesNotExist, ValueError): raise Http404 else: result = all([load_class(pre_post_create_filter)( topic=topic, request=request, forum=topic.forum, ).is_allowed(request.user) for pre_post_create_filter in defaults.PYBB_PRE_POST_CREATE_FILTERS]) if not result: raise PermissionDenied session_key = make_session_key(topic) post_ids = request.session.get(session_key, []) if post.pk in post_ids: post_ids.remove(post.pk) else: post_ids.append(post.pk) request.session[session_key] = post_ids if request.is_ajax(): return HttpResponse('Ok') return redirect(post.get_anchor_url(request.user))
def clean_body(self): body = self.cleaned_data['body'] user = self.user or self.instance.user if defaults.PYBB_BODY_VALIDATOR: defaults.PYBB_BODY_VALIDATOR(user, body) for cleaner_class in defaults.PYBB_BODY_CLEANERS: body = load_class(cleaner_class)(user, body) return body
def init_formatters(self): simple_formatters = list(self.simple_formatters.items()) + list( defaults.PYBB_BBCODE_MARKUP_SIMPLE_FORMATTERS) for tag_name, (format_str, context) in simple_formatters: if context: self.parser.add_simple_formatter(tag_name, format_str, **context) else: self.parser.add_simple_formatter(tag_name, format_str) formatters = list(self.formatters.items()) + list( defaults.PYBB_BBCODE_MARKUP_FORMATTERS) for tag_name, (formatter_name, context) in formatters: if context: self.parser.add_formatter(tag_name, load_class(formatter_name), **context) else: self.parser.add_formatter(tag_name, load_class(formatter_name))
def get_topic_delete_formset(topics, form=TopicDeleteForm): class BaseTopicDeleteFormSet(BaseFormSet): def __init__(self, *args, **kwargs): self.topics = topics super(BaseTopicDeleteFormSet, self).__init__(*args, **kwargs) def _construct_form(self, i, **kwargs): kwargs['topic'] = self.topics[i] return super(BaseTopicDeleteFormSet, self)._construct_form(i, **kwargs) return formset_factory(extra=len(topics), form=load_class(defaults.PYBB_TOPIC_DELETE_FORM), formset=BaseTopicDeleteFormSet)
def render(self, context): context_time = self.time.resolve(context) delta = tznow() - context_time today = tznow().replace(hour=0, minute=0, second=0) yesterday = today - timedelta(days=1) tomorrow = today + timedelta(days=1) if delta.days == 0: if delta.seconds < 60: if context['LANGUAGE_CODE'].startswith('ru') and pytils_enabled: msg = _('seconds ago,seconds ago,seconds ago') msg = pytils.numeral.choose_plural(delta.seconds, msg) else: msg = _('seconds ago') return u'%d %s' % (delta.seconds, msg) elif delta.seconds < 3600: minutes = int(delta.seconds / 60) if context['LANGUAGE_CODE'].startswith('ru') and pytils_enabled: msg = _('minutes ago,minutes ago,minutes ago') msg = pytils.numeral.choose_plural(minutes, msg) else: msg = _('minutes ago') return u'%d %s' % (minutes, msg) if context['user'].is_authenticated: if time.daylight: tz1 = time.altzone else: tz1 = time.timezone default_tz = load_class(defaults.PYBB_TIMEZONE_FROM_USER)(context['user']) tz = tz1 + default_tz * 60 * 60 context_time = context_time + timedelta(seconds=tz) if today < context_time < tomorrow: return _('today, %s') % context_time.strftime('%H:%M') if yesterday < context_time < today: return _('yesterday, %s') % context_time.strftime('%H:%M') return dateformat.format(context_time, 'd M, Y H:i')
def post(self, request, *args, **kwargs): try: topic = Topic.objects.get(pk=request.POST['topic_id']) post = topic.posts.filter_by_user( topic, request.user).get(pk=request.POST['post_id']) except (Topic.DoesNotExist, Post.DoesNotExist, ValueError): raise Http404 else: result = all([ load_class(pre_post_create_filter)( topic=topic, request=request, forum=topic.forum, ).is_allowed(request.user) for pre_post_create_filter in defaults.PYBB_PRE_POST_CREATE_FILTERS ]) if not result: raise PermissionDenied session_key = make_session_key(topic) post_ids = request.session.get(session_key, []) if post.pk in post_ids: post_ids.remove(post.pk) else: post_ids.append(post.pk) request.session[session_key] = post_ids if request.is_ajax(): return HttpResponse('Ok') return redirect(post.get_anchor_url(request.user))
def quote(post, username): return load_class(defaults.PYBB_QUOTE_ENGINE)(post, username).render()
from pybb.contrib.search import settings from pybb.util import load_class SearchForm = load_class(settings.PYBB_SEARCH_SEARCH_FORM)
forms_cnt = len(self.initial_forms) + len([form for form in self.extra_forms if form.has_changed()]) - len(self.deleted_forms) if forms_cnt > defaults.PYBB_POLL_MAX_ANSWERS: raise forms.ValidationError(_('You can''t add more than %s answers for poll') % defaults.PYBB_POLL_MAX_ANSWERS) if forms_cnt < 2: raise forms.ValidationError(_('Add two or more answers for this poll')) PollAnswerFormSet = inlineformset_factory(Poll, PollAnswer, extra=2, max_num=defaults.PYBB_POLL_MAX_ANSWERS, form=PollAnswerForm, formset=BasePollAnswerFormset) pybb_premoderation = None if defaults.PYBB_PREMODERATION: pybb_premoderation = load_class(defaults.PYBB_PREMODERATION) class PostForm(forms.ModelForm): error_messages = { 'duplicate': _("A topic with that name already exists."), } name = forms.CharField(label=_('Subject')) body = forms.CharField(label=_('Message'), widget=forms.Textarea(attrs={'class': 'pretty_editor'})) hash = forms.CharField(label=_('Hash'), widget=forms.HiddenInput())
from pybb import defaults from pybb.util import load_class AttachmentForm = load_class(defaults.PYBB_ATTACHMENT_FORM) PollAnswerForm = load_class(defaults.PYBB_POLL_ANSWER_FORM) PollAnswerFormSet = load_class(defaults.PYBB_POLL_ANSWER_FORM_SET) PostForm = load_class(defaults.PYBB_POST_FORM) AdminPostForm = load_class(defaults.PYBB_ADMIN_POST_FORM) AdminPostForm.__bases__ = (PostForm, ) UserSearchForm = load_class(defaults.PYBB_USER_SEARCH_FORM) PollForm = load_class(defaults.PYBB_POLL_FORM) ForumForm = load_class(defaults.PYBB_FORUM_FORM) ModerationForm = load_class(defaults.PYBB_MODERATION_FORM) SearchUserForm = load_class(defaults.PYBB_SEARCH_USER_FORM) AttachmentFormSet = load_class(defaults.PYBB_ATTACHMENT_FORM_SET) TopicMergeForm = load_class(defaults.PYBB_TOPIC_MERGE_FORM) TopicMoveForm = load_class(defaults.PYBB_TOPIC_MOVE_FORM)
from pybb import defaults from pybb.util import load_class IndexView = load_class(defaults.PYBB_INDEX_VIEW) ForumCreateView = load_class(defaults.PYBB_FORUM_CREATE_VIEW) ForumDetailView = load_class(defaults.PYBB_FORUM_DETAIL_VIEW) ForumUpdateView = load_class(defaults.PYBB_FORUM_UPDATE_VIEW) LogModerationListView = load_class(defaults.PYBB_LOG_MODERATION_VIEW) TopicDetailView = load_class(defaults.PYBB_TOPIC_DETAIL_VIEW) PostsMoveView = load_class(defaults.PYBB_POSTS_MOVE_VIEW) PostCreateView = load_class(defaults.PYBB_POST_CREATE_VIEW) PostsCreateView = load_class(defaults.PYBB_POSTS_CREATE_VIEW) PostUpdateView = load_class(defaults.PYBB_POST_UPDATE_VIEW) PostRedirectView = load_class(defaults.PYBB_POST_REDIRECT_VIEW) PostModerateView = load_class(defaults.PYBB_POST_MODERATE_VIEW) PostDeleteView = load_class(defaults.PYBB_POST_DELETE_VIEW) TopicDeleteView = load_class(defaults.PYBB_TOPIC_DELETE_VIEW) TopicsDeleteView = load_class(defaults.PYBB_TOPICS_DELETE_VIEW) TopicStickView = load_class(defaults.PYBB_TOPIC_STICK_VIEW) TopicUnstickView = load_class(defaults.PYBB_TOPIC_UNSTICK_VIEW) TopicCloseView = load_class(defaults.PYBB_TOPIC_CLOSE_VIEW) TopicMergeView = load_class(defaults.PYBB_TOPIC_MERGE_VIEW) TopicMoveView = load_class(defaults.PYBB_TOPIC_MOVE_VIEW) TopicOpenView = load_class(defaults.PYBB_TOPIC_OPEN_VIEW) TopicTrackerRedirectView = load_class(defaults.PYBB_TOPIC_TRACKER_REDIRECT_VIEW) TopicPollVoteView = load_class(defaults.PYBB_TOPIC_POLL_VOTE_VIEW) ModeratorListView = load_class(defaults.PYBB_MODERATOR_LIST_VIEW) ModeratorDetailView = load_class(defaults.PYBB_MODERATOR_DETAIL_VIEW) ModeratorCreateView = load_class(defaults.PYBB_MODERATOR_CREATE_VIEW) ModeratorDeleteView = load_class(defaults.PYBB_MODERATOR_DELETE_VIEW)
from pybb import defaults from pybb.util import load_class IndexView = load_class(defaults.PYBB_INDEX_VIEW) ForumCreateView = load_class(defaults.PYBB_FORUM_CREATE_VIEW) ForumDetailView = load_class(defaults.PYBB_FORUM_DETAIL_VIEW) ForumUpdateView = load_class(defaults.PYBB_FORUM_UPDATE_VIEW) LogModerationListView = load_class(defaults.PYBB_LOG_MODERATION_VIEW) TopicDetailView = load_class(defaults.PYBB_TOPIC_DETAIL_VIEW) PostsMoveView = load_class(defaults.PYBB_POSTS_MOVE_VIEW) PostCreateView = load_class(defaults.PYBB_POST_CREATE_VIEW) PostsCreateView = load_class(defaults.PYBB_POSTS_CREATE_VIEW) PostUpdateView = load_class(defaults.PYBB_POST_UPDATE_VIEW) PostRedirectView = load_class(defaults.PYBB_POST_REDIRECT_VIEW) PostModerateView = load_class(defaults.PYBB_POST_MODERATE_VIEW) PostDeleteView = load_class(defaults.PYBB_POST_DELETE_VIEW) TopicDeleteView = load_class(defaults.PYBB_TOPIC_DELETE_VIEW) TopicsDeleteView = load_class(defaults.PYBB_TOPICS_DELETE_VIEW) TopicStickView = load_class(defaults.PYBB_TOPIC_STICK_VIEW) TopicUnstickView = load_class(defaults.PYBB_TOPIC_UNSTICK_VIEW) TopicCloseView = load_class(defaults.PYBB_TOPIC_CLOSE_VIEW) TopicMergeView = load_class(defaults.PYBB_TOPIC_MERGE_VIEW) TopicMoveView = load_class(defaults.PYBB_TOPIC_MOVE_VIEW) TopicOpenView = load_class(defaults.PYBB_TOPIC_OPEN_VIEW) TopicTrackerRedirectView = load_class( defaults.PYBB_TOPIC_TRACKER_REDIRECT_VIEW) TopicPollVoteView = load_class(defaults.PYBB_TOPIC_POLL_VOTE_VIEW) ModeratorListView = load_class(defaults.PYBB_MODERATOR_LIST_VIEW) ModeratorDetailView = load_class(defaults.PYBB_MODERATOR_DETAIL_VIEW) ModeratorCreateView = load_class(defaults.PYBB_MODERATOR_CREATE_VIEW)
from pybb import defaults from pybb.util import load_class from pybb.models.base import BaseTopicRedirection, PostDeletion # NOQA class TopicRedirection(BaseTopicRedirection): class Meta(BaseTopicRedirection.Meta): abstract = False Moderator = load_class(defaults.PYBB_MODERATOR_MODEL) Forum = load_class(defaults.PYBB_FORUM_MODEL) Post = load_class(defaults.PYBB_POST_MODEL) Topic = load_class(defaults.PYBB_TOPIC_MODEL) TopicReadTracker = load_class(defaults.PYBB_TOPIC_READ_TRACKER_MODEL) ForumReadTracker = load_class(defaults.PYBB_FORUM_READ_TRACKER_MODEL) PollAnswer = load_class(defaults.PYBB_POLL_ANSWER_MODEL) PollAnswerUser = load_class(defaults.PYBB_POLL_ANSWER_USER_MODEL) LogModeration = load_class(defaults.PYBB_LOG_MODERATION_MODEL) Attachment = load_class(defaults.PYBB_ATTACHMENT_MODEL) Poll = load_class(defaults.PYBB_POLL_MODEL) Subscription = load_class(defaults.PYBB_SUBSCRIPTION_MODEL) Forum.on_change(Forum.watch_forum) Post.on_change(Post.watch_topic) from pybb.receivers import *
from pybb.contrib.search import settings from pybb.util import load_class SearchView = load_class(settings.PYBB_SEARCH_SEARCH_VIEW)
if forms_cnt < 2: raise forms.ValidationError( _('Add two or more answers for this poll')) PollAnswerFormSet = inlineformset_factory( Poll, PollAnswer, extra=2, max_num=defaults.PYBB_POLL_MAX_ANSWERS, form=PollAnswerForm, formset=BasePollAnswerFormset) pybb_premoderation = None if defaults.PYBB_PREMODERATION: pybb_premoderation = load_class(defaults.PYBB_PREMODERATION) class PostForm(forms.ModelForm): error_messages = { 'duplicate': _("A topic with that name already exists."), } name = forms.CharField(label=_('Subject')) body = forms.CharField( label=_('Message'), widget=forms.Textarea(attrs={'class': 'pretty_editor'})) hash = forms.CharField(label=_('Hash'), widget=forms.HiddenInput())