Changeset 279:bde1c620c072
- Timestamp:
- 30.10.2010 10:03:50 (19 months ago)
- Branch:
- default
- Location:
- djangobb/djangobb_forum
- Files:
-
- 12 edited
-
feeds.py (modified) (6 diffs)
-
forms.py (modified) (2 diffs)
-
models.py (modified) (1 diff)
-
signals.py (modified) (3 diffs)
-
subscription.py (modified) (2 diffs)
-
templates/forum/base.html (modified) (1 diff)
-
templates/forum/delete_posts.html (modified) (1 diff)
-
templates/forum/forum.html (modified) (1 diff)
-
templates/forum/forum_row.html (modified) (1 diff)
-
templates/forum/topic.html (modified) (2 diffs)
-
urls.py (modified) (2 diffs)
-
views.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
djangobb/djangobb_forum/feeds.py
r211 r279 1 from django.contrib.syndication. feeds import Feed, FeedDoesNotExist1 from django.contrib.syndication.views import Feed, FeedDoesNotExist 2 2 from django.core.exceptions import ObjectDoesNotExist 3 3 from django.utils.feedgenerator import Atom1Feed 4 4 from django.core.urlresolvers import reverse 5 5 from django.utils.translation import ugettext_lazy as _ 6 from django.contrib.auth.models import User 7 from django.db.models import Q 8 from django.http import Http404 6 9 7 10 from djangobb_forum.models import Post, Topic, Forum, Category … … 26 29 description_template = 'forum/feeds/posts_description.html' 27 30 28 def items(self): 29 return Post.objects.order_by('-created')[:15] 31 def get_object(self, request): 32 user_groups = request.user.groups.all() 33 if request.user.is_anonymous(): 34 user_groups = [] 35 allow_forums = Forum.objects.filter( 36 Q(category__groups__in=user_groups) | \ 37 Q(category__groups__isnull=True)) 38 return allow_forums 39 40 def items(self, allow_forums): 41 return Post.objects.filter(topic__forum__in=allow_forums).order_by('-created')[:15] 30 42 31 43 … … 36 48 description_template = 'forum/feeds/topics_description.html' 37 49 38 def items(self): 39 return Topic.objects.order_by('-created')[:15] 50 def get_object(self, request): 51 user_groups = request.user.groups.all() 52 if request.user.is_anonymous(): 53 user_groups = [] 54 allow_forums = Forum.objects.filter( 55 Q(category__groups__in=user_groups) | \ 56 Q(category__groups__isnull=True)) 57 return allow_forums 58 59 def items(self, allow_forums): 60 return Topic.objects.filter(forum__in=allow_forums).order_by('-created')[:15] 40 61 41 62 … … 44 65 description_template = 'forum/feeds/posts_description.html' 45 66 46 def get_object(self, topics):67 def get_object(self, request, topics): 47 68 if len(topics) != 1: 48 69 raise ObjectDoesNotExist 49 return Topic.objects.get(id=topics[0]) 70 topic = Topic.objects.get(id=topics[0]) 71 if not topic.forum.category.has_access(request.user): 72 raise Http404 73 return topic 50 74 51 75 def title(self, obj): … … 68 92 description_template = 'forum/feeds/posts_description.html' 69 93 70 def get_object(self, forums):94 def get_object(self, request, forums): 71 95 if len(forums) != 1: 72 96 raise ObjectDoesNotExist 73 return Forum.objects.get(id=forums[0]) 97 forum = Forum.objects.get(id=forums[0]) 98 if not forum.category.has_access(request.user): 99 raise Http404 100 return forum 74 101 75 102 def title(self, obj): … … 92 119 description_template = 'forum/feeds/posts_description.html' 93 120 94 def get_object(self, categories):121 def get_object(self, request, categories): 95 122 if len(categories) != 1: 96 123 raise ObjectDoesNotExist 97 return Category.objects.get(id=categories[0]) 124 category = Category.objects.get(id=categories[0]) 125 if not category.has_access(request.user): 126 raise Http404 127 return category 98 128 99 129 def title(self, obj): -
djangobb/djangobb_forum/forms.py
r249 r279 10 10 from django.utils.translation import ugettext as _ 11 11 12 from djangobb_forum.models import Topic, Post, Profile, Reputation, Report, PrivateMessage,\12 from djangobb_forum.models import Topic, Post, Profile, Reputation, Report, \ 13 13 Forum, Attachment, TZ_CHOICES, PRIVACY_CHOICES 14 14 from djangobb_forum.markups import bbmarkup … … 361 361 report.save() 362 362 return report 363 364 365 class CreatePMForm(forms.ModelForm):366 recipient = forms.CharField(label=_('Recipient'))367 368 class Meta:369 model = PrivateMessage370 fields = ['subject', 'body']371 372 def __init__(self, *args, **kwargs):373 self.user = kwargs.pop('user', None)374 super(CreatePMForm, self).__init__(*args, **kwargs)375 self.fields.keyOrder = ['recipient', 'subject', 'body']376 self.fields['subject'].widget = widget=forms.TextInput(attrs={'size':'115'})377 self.fields['body'].widget = forms.Textarea(attrs={'class':'bbcode'})378 379 def clean_recipient(self):380 name = self.cleaned_data['recipient']381 try:382 user = User.objects.get(username=name)383 except User.DoesNotExist:384 raise forms.ValidationError(_('User with login %s does not exist') % name)385 else:386 return user387 388 def save(self):389 pm = PrivateMessage(src_user=self.user, dst_user=self.cleaned_data['recipient'])390 pm = forms.save_instance(self, pm)391 return pm -
djangobb/djangobb_forum/models.py
r251 r279 331 331 return u'%s %s' % (self.reported_by ,self.zapped) 332 332 333 334 class PrivateMessage(models.Model):335 dst_user = models.ForeignKey(User, verbose_name=_('Recipient'), related_name='dst_users')336 src_user = models.ForeignKey(User, verbose_name=_('Author'), related_name='src_users')337 read = models.BooleanField(_('Read'), blank=True, default=False)338 created = models.DateTimeField(_('Created'), auto_now_add=True)339 markup = models.CharField(_('Markup'), max_length=15, default=forum_settings.DEFAULT_MARKUP, choices=MARKUP_CHOICES)340 subject = models.CharField(_('Subject'), max_length=255)341 body = models.TextField(_('Message'))342 body_html = models.TextField(_('HTML version'))343 body_text = models.TextField(_('Text version'))344 345 class Meta:346 ordering = ['-created']347 verbose_name = _('Private message')348 verbose_name_plural = _('Private messages')349 350 def __unicode__(self):351 return self.subject352 353 def save(self, *args, **kwargs):354 if self.markup == 'bbcode':355 self.body_html = bbmarkup.bbcode(self.body)356 elif self.markup == 'markdown':357 self.body_html = unicode(Markdown(self.body, safe_mode='escape'))358 #self.body_html = markdown(self.body, 'safe')359 else:360 raise Exception('Invalid markup property: %s' % self.markup)361 self.body_html = urlize(self.body_html)362 if forum_settings.SMILES_SUPPORT:363 self.body_html = smiles(self.body_html)364 super(PrivateMessage, self).save(*args, **kwargs)365 366 @models.permalink367 def get_absolute_url(self):368 return ('djangobb:forum_show_pm', [self.id])369 370 # TODO: summary and part of the save method is the same as in the Post model371 # move to common functions372 def summary(self):373 LIMIT = 50374 tail = len(self.body) > LIMIT and '...' or ''375 return self.body[:LIMIT] + tail376 377 378 333 class Ban(models.Model): 379 334 user = models.OneToOneField(User, verbose_name=_('Banned user'), related_name='ban_users') -
djangobb/djangobb_forum/signals.py
r218 r279 3 3 from django.db.models.signals import post_save, pre_save, post_delete 4 4 5 from djangobb_forum.subscription import notify_topic_subscribers , notify_pm_recipients6 from djangobb_forum.models import Topic, Post , PrivateMessage5 from djangobb_forum.subscription import notify_topic_subscribers 6 from djangobb_forum.models import Topic, Post 7 7 8 8 … … 23 23 24 24 25 def pm_saved(instance, **kwargs):26 notify_pm_recipients(instance)27 28 29 25 def topic_saved(instance, **kwargs): 30 26 created = kwargs.get('created') … … 39 35 40 36 post_save.connect(post_saved, sender=Post) 41 post_save.connect(pm_saved, sender=PrivateMessage)42 37 post_save.connect(topic_saved, sender=Topic) -
djangobb/djangobb_forum/subscription.py
r242 r279 14 14 See topic: %(post_url)s 15 15 Unsubscribe %(unsubscribe_url)s""") 16 17 PM_RECIPIENT_TEXT_TEMPLATE = (u"""User %(username)s have sent your the new private message.18 ---19 %(message)s20 ---21 See message online: %(pm_url)s""")22 16 23 17 … … 60 54 #html_content = html_version(post) 61 55 send_mail([to_email], subject, text_content) 62 63 64 def notify_pm_recipients(pm):65 if not pm.read:66 from djangobb_forum.models import PrivateMessage67 subject = (u'There are new messages')68 to_email = pm.dst_user.email69 text_content = PM_RECIPIENT_TEXT_TEMPLATE % {70 'username': pm.src_user.username,71 'message': pm.body_text,72 'pm_url': absolute_url(pm.get_absolute_url()),73 }74 send_mail([to_email], subject, text_content) -
djangobb/djangobb_forum/templates/forum/base.html
r211 r279 16 16 <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}forum/js/markitup/sets/bbcode/style.css" /> 17 17 18 <link rel="alternate" type="application/atom+xml" href="{% url djangobb:forum_ feed "posts"%}" title="{% trans "Latest posts on forum" %}" />19 <link rel="alternate" type="application/atom+xml" href="{% url djangobb:forum_ feed "topics"%}" title="{% trans "Latest topics on forum" %}" />18 <link rel="alternate" type="application/atom+xml" href="{% url djangobb:forum_posts_feed %}" title="{% trans "Latest posts on forum" %}" /> 19 <link rel="alternate" type="application/atom+xml" href="{% url djangobb:forum_topics_feed %}" title="{% trans "Latest topics on forum" %}" /> 20 20 21 21 <link rel="shortcut icon" href="{{ MEDIA_URL }}forum/favicon.png" type="image/png" /> -
djangobb/djangobb_forum/templates/forum/delete_posts.html
r272 r279 8 8 <p class="pagelink conl">{% pagination %}</p> 9 9 <ul><li><a href="{% url djangobb:index %}">{% trans "Root" %} </a></li><li>» {% link topic.forum %} </li><li>» {{ topic }} 10 <a href="{% url djangobb:forum_ feed "topic"%}{{ topic.id }}"><img src="{{ MEDIA_URL }}/forum/img/feed-icon-small.png" alt="[RSS Feed]" title="[RSS Feed]" style="vertical-align:middle;" /></a>10 <a href="{% url djangobb:forum_topic_feed %}{{ topic.id }}"><img src="{{ MEDIA_URL }}/forum/img/feed-icon-small.png" alt="[RSS Feed]" title="[RSS Feed]" style="vertical-align:middle;" /></a> 11 11 </li></ul> 12 12 <div class="clearer"></div> -
djangobb/djangobb_forum/templates/forum/forum.html
r211 r279 17 17 <div id="vf" class="blocktable"> 18 18 <h2> 19 <a href="{% url djangobb:forum_f eed "forum" %}{{ forum.id }}"><img src="{{ MEDIA_URL }}/forum/img/feed-icon-small.png" alt="[RSS Feed]" title="[RSS Feed]" class="rss" /></a>19 <a href="{% url djangobb:forum_forum_feed forum.id %}"><img src="{{ MEDIA_URL }}/forum/img/feed-icon-small.png" alt="[RSS Feed]" title="[RSS Feed]" class="rss" /></a> 20 20 <b><span>{{ forum.name }}</span></b> 21 21 </h2> -
djangobb/djangobb_forum/templates/forum/forum_row.html
r278 r279 14 14 </div> 15 15 <div class="tclcon"> 16 <h3>{% link forum %} <a href="{% url djangobb:forum_f eed "forum" %}{{ forum.id }}/"><img src="{{ MEDIA_URL }}forum/img/feed-icon-small.png" alt="[RSS Feed]" title="[RSS Feed]" class="rss" /></a></h3>16 <h3>{% link forum %} <a href="{% url djangobb:forum_forum_feed forum.id %}"><img src="{{ MEDIA_URL }}forum/img/feed-icon-small.png" alt="[RSS Feed]" title="[RSS Feed]" class="rss" /></a></h3> 17 17 {{ forum.description|safe }} 18 18 <p> -
djangobb/djangobb_forum/templates/forum/topic.html
r272 r279 14 14 <li> 15 15 <a href="{% url djangobb:index %}">{% trans "Root" %} </a></li><li>» {% link topic.forum %} </li><li>» {{ topic.name }} 16 <a href="{% url djangobb:forum_ feed "topic" %}{{ topic.id }}/"><img src="{{ MEDIA_URL }}forum/img/feed-icon-small.png" alt="[RSS Feed]" title="[RSS Feed]" class="breadcrumb_rss" /></a>16 <a href="{% url djangobb:forum_topic_feed topic.id %}"><img src="{{ MEDIA_URL }}forum/img/feed-icon-small.png" alt="[RSS Feed]" title="[RSS Feed]" class="breadcrumb_rss" /></a> 17 17 </li> 18 18 </ul> … … 134 134 <p class="postlink conr"><a href="{% url djangobb:add_post topic.id %}">{% trans "Reply" %}</a></p> 135 135 <ul><li><a href="{% url djangobb:index %}">{% trans "Root" %} </a></li><li>» {% link topic.forum %} </li><li>» {{ topic }} 136 <a href="{% url djangobb:forum_ feed "topic" %}{{ topic.id }}"><img src="{{ MEDIA_URL }}/forum/img/feed-icon-small.png" alt="[RSS Feed]" title="[RSS Feed]" class="breadcrumb_rss" /></a>136 <a href="{% url djangobb:forum_topic_feed topic.id %}"><img src="{{ MEDIA_URL }}/forum/img/feed-icon-small.png" alt="[RSS Feed]" title="[RSS Feed]" class="breadcrumb_rss" /></a> 137 137 </li></ul> 138 138 {% if user.is_authenticated %} -
djangobb/djangobb_forum/urls.py
r260 r279 5 5 from djangobb_forum.feeds import LastPosts, LastTopics, LastPostsOnForum,\ 6 6 LastPostsOnCategory, LastPostsOnTopic 7 8 feeds = { 9 'posts': LastPosts, 10 'topics': LastTopics, 11 'topic': LastPostsOnTopic, 12 'forum': LastPostsOnForum, 13 'category': LastPostsOnCategory, 14 } 7 15 8 16 9 urlpatterns = patterns('', … … 48 41 url('^subscription/topic/(?P<topic_id>\d+)/delete/$', forum_views.delete_subscription, name='forum_delete_subscription'), 49 42 url('^subscription/topic/(?P<topic_id>\d+)/add/$', forum_views.add_subscription, name='forum_add_subscription'), 43 50 44 # Feeds 51 url(r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', 52 {'feed_dict': feeds}, name='forum_feed'), 45 url(r'^feeds/posts/$', LastPosts(), name='forum_posts_feed'), 46 url(r'^feeds/topics/$', LastTopics(), name='forum_topics_feed'), 47 url(r'^feeds/topic/(?P<topics>\d+)/$', LastPostsOnTopic(), name='forum_topic_feed'), 48 url(r'^feeds/forum/(?P<forums>\d+)/$', LastPostsOnForum(), name='forum_forum_feed'), 49 url(r'^feeds/category/(?P<categories>\d+)/$', LastPostsOnCategory(), name='forum_category_feed'), 53 50 ) 54 55 51 56 52 ### EXTENSIONS ### -
djangobb/djangobb_forum/views.py
r264 r279 20 20 from djangobb_forum.util import render_to, paged, build_form, paginate, set_language 21 21 from djangobb_forum.models import Category, Forum, Topic, Post, Profile, Reputation,\ 22 Report, PrivateMessage,Attachment, PostTracking22 Report, Attachment, PostTracking 23 23 from djangobb_forum.forms import AddPostForm, EditPostForm, UserSearchForm,\ 24 24 PostSearchForm, ReputationForm, MailToForm, EssentialsProfileForm,\ 25 25 PersonalProfileForm, MessagingProfileForm, PersonalityProfileForm,\ 26 DisplayProfileForm, PrivacyProfileForm, ReportForm, UploadAvatarForm , CreatePMForm26 DisplayProfileForm, PrivacyProfileForm, ReportForm, UploadAvatarForm 27 27 from djangobb_forum.markups import bbmarkup 28 28 from djangobb_forum.templatetags import forum_extras
Note: See TracChangeset
for help on using the changeset viewer.
