Commit | Line | Data |
---|---|---|
9505f1a3 A |
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 | ||
45384c6d A |
17 | import os |
18 | import logging | |
19 | _log = logging.getLogger(__name__) | |
20 | ||
9505f1a3 | 21 | from mediagoblin.media_types import MediaManagerBase |
a590e0ba | 22 | from mediagoblin.media_types.blog.models import Blog, BlogPostData |
9505f1a3 A |
23 | |
24 | from mediagoblin.tools import pluginapi | |
25 | ||
45384c6d | 26 | PLUGIN_DIR = os.path.dirname(__file__) |
511ce0d6 | 27 | MEDIA_TYPE = 'mediagoblin.media_types.blogpost' |
9505f1a3 | 28 | |
bb96b7d4 | 29 | |
9505f1a3 A |
30 | def setup_plugin(): |
31 | config = pluginapi.get_config(MEDIA_TYPE) | |
45384c6d | 32 | _log.info("setting up blog media type plugin.") |
bb96b7d4 AM |
33 | |
34 | routes = [ | |
45384c6d | 35 | #blog_create |
bb96b7d4 | 36 | ('mediagoblin.media_types.blog.create', |
45384c6d A |
37 | '/u/<string:user>/b/create/', |
38 | 'mediagoblin.media_types.blog.views:blog_edit' | |
bb96b7d4 AM |
39 | ), |
40 | #blog_edit | |
41 | ('mediagoblin.media_types.blog.edit', | |
42 | '/u/<string:user>/b/<string:blog_slug>/edit/', | |
45384c6d A |
43 | 'mediagoblin.media_types.blog.views:blog_edit' |
44 | ), | |
45 | #blog post create | |
bb96b7d4 | 46 | ('mediagoblin.media_types.blog.blogpost.create', |
45384c6d A |
47 | '/u/<string:user>/b/<string:blog_slug>/p/create/', |
48 | 'mediagoblin.media_types.blog.views:blogpost_create' | |
49 | ), | |
50 | #blog post edit | |
bb96b7d4 | 51 | ('mediagoblin.media_types.blog.blogpost.edit', |
45384c6d A |
52 | '/u/<string:user>/b/<string:blog_slug>/p/<string:blog_post_slug>/edit/', |
53 | 'mediagoblin.media_types.blog.views:blogpost_edit' | |
54 | ), | |
377800e7 AM |
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 | |
45384c6d | 61 | ('mediagoblin.media_types.blog.blog-dashboard', |
377800e7 | 62 | '/u/<string:user>/b/<string:blog_slug>/dashboard/', |
45384c6d A |
63 | 'mediagoblin.media_types.blog.views:blog_dashboard' |
64 | ), | |
65 | #blog post listing view | |
66 | ('mediagoblin.media_types.blog.blog_post_listing', | |
3a971ef7 | 67 | '/u/<string:user>/b/<string:blog_slug>/', |
45384c6d A |
68 | 'mediagoblin.media_types.blog.views:blog_post_listing' |
69 | ), | |
70 | #blog post draft view | |
bb96b7d4 | 71 | ('mediagoblin.media_types.blog.blogpost_draft_view', |
45384c6d | 72 | '/u/<string:user>/b/<string:blog_slug>/p/<string:blog_post_slug>/draft/', |
5d9ecb05 AM |
73 | 'mediagoblin.media_types.blog.views:draft_view' |
74 | ), | |
bb96b7d4 AM |
75 | #blog delete view |
76 | ('mediagoblin.media_types.blog.blog_delete', | |
5d9ecb05 | 77 | '/u/<string:user>/b/<string:blog_slug>/delete/', |
c3218c05 AM |
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' | |
8189f6c7 | 84 | )] |
bb96b7d4 AM |
85 | |
86 | ||
45384c6d A |
87 | pluginapi.register_routes(routes) |
88 | pluginapi.register_template_path(os.path.join(PLUGIN_DIR, 'templates')) | |
a6a7d785 | 89 | pluginapi.register_template_hooks({"user_profile": "mediagoblin/blog/url_to_blogs_dashboard.html", |
eebd8fe3 | 90 | "blog_dashboard_home": "mediagoblin/blog/url_to_dashboard.html", |
bb96b7d4 AM |
91 | }) |
92 | ||
93 | ||
9505f1a3 A |
94 | class BlogPostMediaManager(MediaManagerBase): |
95 | human_readable = "Blog Post" | |
96 | display_template = "mediagoblin/media_displays/blogpost.html" | |
97 | default_thumb = "images/media_thumbs/blogpost.jpg" | |
bb96b7d4 | 98 | |
a590e0ba A |
99 | def get_blog_by_blogpost(self): |
100 | blog_post_data = BlogPostData.query.filter_by(media_entry=self.entry.id).first() | |
101 | blog = Blog.query.filter_by(id=blog_post_data.blog).first() | |
102 | return blog | |
bb96b7d4 | 103 | |
9ad6454e | 104 | def add_to_user_home_context(context): |
461cd7c1 | 105 | """Inject a user's blogs into a (user home page) template context""" |
bb96b7d4 AM |
106 | blogs = context['request'].db.Blog.query.filter_by(author=context['user'].id) |
107 | ||
461cd7c1 | 108 | if blogs.count(): |
bb96b7d4 AM |
109 | context['blogs'] = blogs |
110 | else: | |
111 | context['blogs'] = None | |
112 | return context | |
113 | ||
114 | ||
9505f1a3 A |
115 | hooks = { |
116 | 'setup': setup_plugin, | |
9505f1a3 | 117 | ('media_manager', MEDIA_TYPE): lambda: BlogPostMediaManager, |
9ad6454e AM |
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 | |
9505f1a3 | 121 | } |