1 #GNU MediaGoblin -- federated, autonomous media hosting
2 # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
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.
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.
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/>.
19 _log
= logging
.getLogger(__name__
)
21 from mediagoblin
.media_types
import MediaManagerBase
22 from mediagoblin
.media_types
.blog
.models
import Blog
, BlogPostData
24 from mediagoblin
.tools
import pluginapi
26 PLUGIN_DIR
= os
.path
.dirname(__file__
)
27 MEDIA_TYPE
= 'mediagoblin.media_types.blogpost'
31 config
= pluginapi
.get_config(MEDIA_TYPE
)
32 _log
.info("setting up blog media type plugin.")
36 ('mediagoblin.media_types.blog.create',
37 '/u/<string:user>/b/create/',
38 'mediagoblin.media_types.blog.views: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'
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'
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'
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'
61 ('mediagoblin.media_types.blog.blog-dashboard',
62 '/u/<string:user>/b/<string:blog_slug>/dashboard/',
63 'mediagoblin.media_types.blog.views:blog_dashboard'
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'
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'
76 ('mediagoblin.media_types.blog.blog_delete',
77 '/u/<string:user>/b/<string:blog_slug>/delete/',
78 'mediagoblin.media_types.blog.views:blog_delete'
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'
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",
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"
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()
105 def add_to_user_home_context(context
):
106 blogs
= context
['request'].db
.Blog
.query
.filter_by(author
=context
['user'].id)
109 context
['blogs'] = blogs
111 context
['blogs'] = None
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