Change Redirect url to blog dashboard in blog_edit view.
[mediagoblin.git] / mediagoblin / media_types / blog / views.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 logging
18
19 _log = logging.getLogger(__name__)
20
21 from datetime import datetime
22
23 from werkzeug.exceptions import Forbidden
24
25 from mediagoblin import mg_globals
26
27 from mediagoblin.media_types.blog import forms as blog_forms
28 from mediagoblin.media_types.blog.models import Blog, BlogPostData
29 from mediagoblin.media_types.blog.lib import may_edit_blogpost
30
31 from mediagoblin.messages import add_message, SUCCESS, ERROR
32 from mediagoblin.decorators import (require_active_login, active_user_from_url,
33 get_media_entry_by_id, user_may_alter_collection,
34 get_user_collection)
35 from mediagoblin.tools.response import (render_to_response,
36 redirect, redirect_obj, render_404)
37 from mediagoblin.tools.translate import pass_to_ugettext as _
38 from mediagoblin.tools.template import render_template
39 from mediagoblin.tools.text import (
40 convert_to_tag_list_of_dicts, media_tags_as_string)
41 from mediagoblin.tools.url import slugify
42
43 from mediagoblin.db.util import check_media_slug_used, check_collection_slug_used
44 from mediagoblin.db.models import User, Collection, MediaEntry
45
46 from mediagoblin.notifications import add_comment_subscription
47
48
49 @require_active_login
50 def blog_edit(request):
51 """
52 View for editing the existing blog or automatically
53 creating a new blog if user does not have any yet.
54 """
55 url_user = request.matchdict.get('user', None)
56 blog_slug = request.matchdict.get('blog_slug', None)
57
58 max_blog_count = 1
59 form = blog_forms.BlogEditForm(request.form)
60 # the blog doesn't exists yet
61 if not blog_slug:
62 if Blog.query.filter_by(author=request.user.id).count()<max_blog_count:
63 if request.method=='GET':
64 return render_to_response(
65 request,
66 'mediagoblin/blog/blog_edit_create.html',
67 {'form': form,
68 'user' : request.user,
69 'app_config': mg_globals.app_config})
70
71 if request.method=='POST' and form.validate():
72 _log.info("Here")
73 blog = Blog()
74 blog.title = unicode(form.title.data)
75 blog.description = unicode(form.description.data) #remember clean html data.
76 blog.author = request.user.id
77 blog.generate_slug()
78
79 blog.save()
80 return redirect(request, "mediagoblin.media_types.blog.blog-dashboard",
81 user=request.user.username,
82 blog_slug=blog.slug)
83 else:
84 add_message(request, ERROR, "You can not create any more blogs")
85 return redirect(request, "mediagoblin.user_pages.user_home",
86 user=request.user.username)
87
88
89 #Blog already exists.
90 else:
91 blog = Blog.query.filter_by(slug=blog_slug).first()
92 if request.method == 'GET':
93 defaults = dict(
94 title = blog.title,
95 description = blog.description,
96 author = request.user.id)
97
98 form = blog_forms.BlogEditForm(**defaults)
99
100 return render_to_response(
101 request,
102 'mediagoblin/blog/blog_edit_create.html',
103 {'form': form,
104 'user': request.user,
105 'app_config': mg_globals.app_config})
106 else:
107 if request.method == 'POST' and form.validate():
108 blog.title = unicode(form.title.data)
109 blog.description = unicode(form.description.data)
110 blog.author = request.user.id
111 blog.generate_slug()
112
113 blog.save()
114 add_message(request, SUCCESS, "Your blog is updated.")
115 return redirect(request, "mediagoblin.media_types.blog.blog-dashboard",
116 user=request.user.username,
117 blog_slug=blog.slug)
118
119 @require_active_login
120 def blogpost_create(request):
121
122
123 form = blog_forms.BlogPostEditForm(request.form, license=request.user.license_preference)
124
125 if request.method == 'POST' and form.validate():
126
127 _log.info(request.form['status'])
128
129 blog_slug = request.matchdict.get('blog_slug')
130 blog = request.db.Blog.query.filter_by(slug=blog_slug,
131 author=request.user.id).first()
132
133
134 blogpost = request.db.MediaEntry()
135 blogpost.media_type = 'mediagoblin.media_types.blogpost'
136 blogpost.title = unicode(form.title.data)
137 blogpost.description = unicode(form.description.data)
138 blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data)
139 blogpost.license = unicode(form.license.data) or None
140 blogpost.uploader = request.user.id
141 blogpost.state = 'processed'
142
143 blogpost.generate_slug()
144
145 blogpost.save()
146
147 # connect this blogpost to its blog
148 blog_post_data = request.db.BlogPostData()
149 blog_post_data.blog = blog.id
150 blog_post_data.media_entry = blogpost.id
151 blog_post_data.save()
152
153 add_message(request, SUCCESS, _('Woohoo! Submitted!'))
154 add_comment_subscription(request.user, blogpost)
155 return redirect(request, "mediagoblin.user_pages.user_home",
156 user=request.user.username)
157
158 return render_to_response(
159 request,
160 'mediagoblin/blog/blog_post_edit_create.html',
161 {'form': form,
162 'app_config': mg_globals.app_config,
163 'user': request.user.username})
164
165
166 @require_active_login
167 def blogpost_edit(request):
168 blog_slug = request.matchdict.get('blog_slug', None)
169 blog_post_slug = request.matchdict.get('blog_post_slug', None)
170
171 blog = request.db.Blog.query.filter_by(slug=blog_slug, author=request.user.id).first()
172 blog_post_data = request.db.BlogPostData.query.filter_by(blog=blog.id).first()
173
174 blogpost = blog_post_data.get_media_entry
175
176 defaults = dict(
177 title = blogpost.title,
178 description = blogpost.description,
179 tags=media_tags_as_string(blogpost.tags),
180 license=blogpost.license)
181
182 form = blog_forms.BlogPostEditForm(request.form, **defaults)
183 if request.method == 'POST' and form.validate():
184 blogpost.title = unicode(form.title.data)
185 blogpost.description = unicode(form.description.data)
186 blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data)
187 blogpost.license = unicode(form.license.data)
188
189 blogpost.generate_slug()
190 blogpost.save()
191
192 add_message(request, SUCCESS, _('Woohoo! edited blogpost is submitted'))
193 return redirect(request, "mediagoblin.user_pages.user_home",
194 user=request.user.username)
195
196 return render_to_response(
197 request,
198 'mediagoblin/blog/blog_post_edit_create.html',
199 {'form': form,
200 'app_config': mg_globals.app_config,
201 'user': request.user.username,
202 'blog_post_slug': blog_post_slug
203 })
204
205 @require_active_login
206 def blog_dashboard(request):
207 blog_posts_list = []
208 blog_slug = request.matchdict.get('blog_slug')
209 _log.info(blog_slug)
210
211 blog = request.db.Blog.query.filter_by(slug=blog_slug).first()
212 blog_post_data = request.db.BlogPostData.query.filter_by(blog=blog.id).all()
213
214 for each_blog_post_data in blog_post_data:
215 blog_post = each_blog_post_data.get_media_entry
216 if blog_post:
217 blog_posts_list.append(blog_post)
218 blog_post_count = len(blog_posts_list)
219
220 if may_edit_blogpost(request, blog):
221 return render_to_response(
222 request,
223 'mediagoblin/blog/blog_admin_dashboard.html',
224 {'blog_posts_list': blog_posts_list,
225 'blog_slug':blog_slug,
226 'blog':blog,
227 'blog_post_count':blog_post_count
228 })
229
230
231
232