some fixes
[mediagoblin.git] / mediagoblin / media_types / blog / __init__.py
1 #GNU MediaGoblin -- federated, autonomous media hosting
2 # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
3 #
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU Affero General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU Affero General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17 import os
18 import logging
19 _log = logging.getLogger(__name__)
20
21 from mediagoblin.media_types import MediaManagerBase
22 from mediagoblin.media_types.blog.models import Blog, BlogPostData
23
24 from mediagoblin.tools import pluginapi
25
26 PLUGIN_DIR = os.path.dirname(__file__)
27 MEDIA_TYPE = 'mediagoblin.media_types.blogpost'
28
29
30 def setup_plugin():
31 config = pluginapi.get_config(MEDIA_TYPE)
32 _log.info("setting up blog media type plugin.")
33
34 routes = [
35 #blog_create
36 ('mediagoblin.media_types.blog.create',
37 '/u/<string:user>/b/create/',
38 'mediagoblin.media_types.blog.views:blog_edit'
39 ),
40 #blog_edit
41 ('mediagoblin.media_types.blog.edit',
42 '/u/<string:user>/b/<string:blog_slug>/edit/',
43 'mediagoblin.media_types.blog.views:blog_edit'
44 ),
45 #blog post create
46 ('mediagoblin.media_types.blog.blogpost.create',
47 '/u/<string:user>/b/<string:blog_slug>/p/create/',
48 'mediagoblin.media_types.blog.views:blogpost_create'
49 ),
50 #blog post edit
51 ('mediagoblin.media_types.blog.blogpost.edit',
52 '/u/<string:user>/b/<string:blog_slug>/p/<string:blog_post_slug>/edit/',
53 'mediagoblin.media_types.blog.views:blogpost_edit'
54 ),
55 #blog collection dashboard in case of multiple blogs
56 ('mediagoblin.media_types.blog.blog_admin_dashboard',
57 '/u/<string:user>/b/dashboard/',
58 'mediagoblin.media_types.blog.views:blog_dashboard'
59 ),
60 #blog dashboard
61 ('mediagoblin.media_types.blog.blog-dashboard',
62 '/u/<string:user>/b/<string:blog_slug>/dashboard/',
63 'mediagoblin.media_types.blog.views:blog_dashboard'
64 ),
65 #blog post listing view
66 ('mediagoblin.media_types.blog.blog_post_listing',
67 '/u/<string:user>/b/<string:blog_slug>/',
68 'mediagoblin.media_types.blog.views:blog_post_listing'
69 ),
70 #blog post draft view
71 ('mediagoblin.media_types.blog.blogpost_draft_view',
72 '/u/<string:user>/b/<string:blog_slug>/p/<string:blog_post_slug>/draft/',
73 'mediagoblin.media_types.blog.views:draft_view'
74 ),
75 #blog delete view
76 ('mediagoblin.media_types.blog.blog_delete',
77 '/u/<string:user>/b/<string:blog_slug>/delete/',
78 'mediagoblin.media_types.blog.views:blog_delete'
79 ),
80 # blog about view
81 ('mediagoblin.media_types.blog.blog_about',
82 '/u/<string:user>/b/<string:blog_slug>/about/',
83 'mediagoblin.media_types.blog.views:blog_about_view'
84 )]
85
86
87 pluginapi.register_routes(routes)
88 pluginapi.register_template_path(os.path.join(PLUGIN_DIR, 'templates'))
89 pluginapi.register_template_hooks({"user_profile": "mediagoblin/blog/url_to_blogs_dashboard.html",
90 "blog_dashboard_home": "mediagoblin/blog/url_to_blogging.html",
91 "create_blog_home": "mediagoblin/blog/url_to_create_blog.html",
92 })
93
94
95 class BlogPostMediaManager(MediaManagerBase):
96 human_readable = "Blog Post"
97 display_template = "mediagoblin/media_displays/blogpost.html"
98 default_thumb = "images/media_thumbs/blogpost.jpg"
99
100 def get_blog_by_blogpost(self):
101 blog_post_data = BlogPostData.query.filter_by(media_entry=self.entry.id).first()
102 blog = Blog.query.filter_by(id=blog_post_data.blog).first()
103 return blog
104
105 def add_to_user_home_context(context):
106 blogs = context['request'].db.Blog.query.filter_by(author=context['user'].id)
107
108 if blogs:
109 context['blogs'] = blogs
110 else:
111 context['blogs'] = None
112 return context
113
114
115 hooks = {
116 'setup': setup_plugin,
117 ('media_manager', MEDIA_TYPE): lambda: BlogPostMediaManager,
118 # Inject blog context on user profile page
119 ("mediagoblin.user_pages.user_home",
120 "mediagoblin/user_pages/user.html"): add_to_user_home_context
121 }