root/lib/sct/sphenecoll/sphene/sphblog/categorytypes.py

Revision 147:942e3ce3d7d2, 4.7 kB (checked in by Daniele Varrazzo <piro@develer.com>, 1 year ago)

Sphene package updated to r803.

Line 
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                 # This can happen after post was created for
48                 # attaching a file.. which wouldn't create a BlogPostExtension.
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             # If we are posting a reply, use the default PostForm
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                     # If enabled, ping google blogsearch.
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             #print "err.. argl %s" % str(e)
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
Note: See TracBrowser for help on using the browser.