Add test for get_all_media()
[mediagoblin.git] / mediagoblin / media_types / blog / __init__.py
CommitLineData
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
17import os
18import logging
19_log = logging.getLogger(__name__)
20
9505f1a3 21from mediagoblin.media_types import MediaManagerBase
a590e0ba 22from mediagoblin.media_types.blog.models import Blog, BlogPostData
9505f1a3
A
23
24from mediagoblin.tools import pluginapi
25
45384c6d 26PLUGIN_DIR = os.path.dirname(__file__)
511ce0d6 27MEDIA_TYPE = 'mediagoblin.media_types.blogpost'
9505f1a3 28
bb96b7d4 29
9505f1a3
A
30def 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
94class 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 104def 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
115hooks = {
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}