| 1 |
from django import forms |
|---|
| 2 |
from django.core.urlresolvers import reverse |
|---|
| 3 |
from django.utils.safestring import mark_safe |
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
from sphene.community.middleware import get_current_user, get_current_sphdata, get_current_urlconf |
|---|
| 7 |
from sphene.community.sphutils import sph_reverse |
|---|
| 8 |
from sphene.community.models import Tag, TagLabel, TaggedItem, tag_set_labels, tag_get_labels |
|---|
| 9 |
from sphene.community.fields import TagField |
|---|
| 10 |
from sphene.community.widgets import TagWidget |
|---|
| 11 |
|
|---|
| 12 |
from sphene.sphboard.models import Post |
|---|
| 13 |
from sphene.sphboard.views import PostForm |
|---|
| 14 |
from sphene.sphboard.categorytyperegistry import CategoryType, register_category_type |
|---|
| 15 |
from sphene.sphblog.models import BlogPostExtension, BLOG_POST_STATUS_CHOICES, BlogCategoryConfig |
|---|
| 16 |
from sphene.sphblog.utils import slugify |
|---|
| 17 |
|
|---|
| 18 |
|
|---|
| 19 |
class BlogPostForm(PostForm): |
|---|
| 20 |
slug = forms.CharField(required = False, |
|---|
| 21 |
help_text = "Optionally define a slug for this blog post. Otherwise it will be filled automatically.") |
|---|
| 22 |
status = forms.ChoiceField(choices = BLOG_POST_STATUS_CHOICES, |
|---|
| 23 |
initial = 2) |
|---|
| 24 |
tags = TagField(model = Post, required = False) |
|---|
| 25 |
|
|---|
| 26 |
def clean_slug(self): |
|---|
| 27 |
if not 'subject' in self.cleaned_data: |
|---|
| 28 |
raise forms.ValidationError( 'No subject to generate slug.' ) |
|---|
| 29 |
slug = self.cleaned_data['slug'] |
|---|
| 30 |
if slug == '': |
|---|
| 31 |
slug = slugify(self.cleaned_data['subject'], model=BlogPostExtension) |
|---|
| 32 |
else: |
|---|
| 33 |
slug = slugify(slug, model=BlogPostExtension, pk=self.__ext_id) |
|---|
| 34 |
return slug |
|---|
| 35 |
|
|---|
| 36 |
def init_for_category_type(self, category_type, post): |
|---|
| 37 |
self.__ext_id = None |
|---|
| 38 |
super(BlogPostForm, self).init_for_category_type(category_type, post) |
|---|
| 39 |
if post: |
|---|
| 40 |
try: |
|---|
| 41 |
ext = post.blogpostextension_set.get() |
|---|
| 42 |
self.__ext_id = ext.id |
|---|
| 43 |
self.fields['tags'].initial = tag_get_labels(post) |
|---|
| 44 |
self.fields['slug'].initial = ext.slug |
|---|
| 45 |
self.fields['status'].initial = ext.status |
|---|
| 46 |
except BlogPostExtension.DoesNotExist: |
|---|
| 47 |
|
|---|
| 48 |
|
|---|
| 49 |
pass |
|---|
| 50 |
|
|---|
| 51 |
|
|---|
| 52 |
class BlogCategoryType(CategoryType): |
|---|
| 53 |
name = "sphblog" |
|---|
| 54 |
|
|---|
| 55 |
label = "Blog Category" |
|---|
| 56 |
|
|---|
| 57 |
def get_post_form_class(self, replypost, editpost): |
|---|
| 58 |
if replypost is not None and \ |
|---|
| 59 |
(editpost is None or editpost.thread is not None): |
|---|
| 60 |
|
|---|
| 61 |
return PostForm |
|---|
| 62 |
return BlogPostForm |
|---|
| 63 |
|
|---|
| 64 |
def save_post(self, newpost, data): |
|---|
| 65 |
super(BlogCategoryType, self).save_post(newpost, data) |
|---|
| 66 |
if newpost.thread is not None: |
|---|
| 67 |
return |
|---|
| 68 |
try: |
|---|
| 69 |
ext = newpost.blogpostextension_set.get() |
|---|
| 70 |
except BlogPostExtension.DoesNotExist: |
|---|
| 71 |
ext = BlogPostExtension( post = newpost, ) |
|---|
| 72 |
|
|---|
| 73 |
|
|---|
| 74 |
ext.slug = data['slug'] |
|---|
| 75 |
ext.status = data['status'] |
|---|
| 76 |
ext.save() |
|---|
| 77 |
|
|---|
| 78 |
tag_set_labels( newpost, data['tags'] ) |
|---|
| 79 |
|
|---|
| 80 |
if newpost.is_new_post: |
|---|
| 81 |
try: |
|---|
| 82 |
config = BlogCategoryConfig.objects.get( \ |
|---|
| 83 |
category = self.category) |
|---|
| 84 |
|
|---|
| 85 |
if config.enable_googleblogping: |
|---|
| 86 |
|
|---|
| 87 |
import urllib |
|---|
| 88 |
url = self.category.group.get_baseurl() |
|---|
| 89 |
blog_feed_url = reverse('sphblog-feeds', urlconf=get_current_urlconf(), kwargs = { 'url': 'latestposts/%s' % self.category.id }) |
|---|
| 90 |
pingurl = 'http://blogsearch.google.com/ping?%s' % \ |
|---|
| 91 |
urllib.urlencode( \ |
|---|
| 92 |
{ 'name': self.category.name, |
|---|
| 93 |
'url': ''.join((url, self.category.get_absolute_url()),), |
|---|
| 94 |
'changesURL': ''.join((url, blog_feed_url),) } ) |
|---|
| 95 |
urllib.urlopen( pingurl ) |
|---|
| 96 |
|
|---|
| 97 |
except BlogCategoryConfig.DoesNotExist: |
|---|
| 98 |
pass |
|---|
| 99 |
|
|---|
| 100 |
|
|---|
| 101 |
|
|---|
| 102 |
def get_absolute_url_for_post(self, post): |
|---|
| 103 |
return post.get_thread().blogpostextension_set.get().get_absolute_url() |
|---|
| 104 |
|
|---|
| 105 |
def append_edit_message_to_post(self, post): |
|---|
| 106 |
return post.thread is not None |
|---|
| 107 |
|
|---|
| 108 |
def get_show_thread_template(self): |
|---|
| 109 |
return 'sphene/sphblog/show_blogentry.html' |
|---|
| 110 |
|
|---|
| 111 |
def get_absolute_url_for_category(self): |
|---|
| 112 |
try: |
|---|
| 113 |
blog_url = sph_reverse('sphblog_category_index', kwargs = { 'category_id': self.category.id }) |
|---|
| 114 |
return blog_url |
|---|
| 115 |
except Exception, e: |
|---|
| 116 |
|
|---|
| 117 |
return None |
|---|
| 118 |
|
|---|
| 119 |
|
|---|
| 120 |
|
|---|
| 121 |
class HiddenBlogCategoryType(BlogCategoryType): |
|---|
| 122 |
name = "sphbloghidden" |
|---|
| 123 |
|
|---|
| 124 |
label = "Blog Category hidden from forum overviews" |
|---|
| 125 |
|
|---|
| 126 |
def is_displayed(self): |
|---|
| 127 |
return False |
|---|
| 128 |
|
|---|