X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=mediagoblin%2Fmedia_types%2Fblog%2Fviews.py;h=a547522ce8ed182451719a1f9b8bb3c24ce57c35;hb=90779509bbe65ab56dd137ffb9d5019f498e79e1;hp=b8e1d8457a1234773ad26f04bbbd83283f3dbe3a;hpb=a42dda21f96f5124d97011c318f068b92a4222b0;p=mediagoblin.git diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index b8e1d845..a547522c 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -19,6 +19,8 @@ _log = logging.getLogger(__name__) from datetime import datetime +import six + from werkzeug.exceptions import Forbidden from mediagoblin.tools import pluginapi @@ -26,7 +28,9 @@ from mediagoblin import mg_globals from mediagoblin.media_types.blog import forms as blog_forms from mediagoblin.media_types.blog.models import Blog, BlogPostData -from mediagoblin.media_types.blog.lib import may_edit_blogpost, set_blogpost_state, get_all_blogposts_of_blog +from mediagoblin.media_types.blog.lib import ( + may_edit_blogpost, set_blogpost_state, get_all_blogposts_of_blog, + get_blog_by_slug) from mediagoblin.messages import add_message, SUCCESS, ERROR from mediagoblin.decorators import (require_active_login, active_user_from_url, @@ -42,7 +46,7 @@ from mediagoblin.tools.text import ( cleaned_markdown_conversion) from mediagoblin.db.util import check_media_slug_used, check_collection_slug_used -from mediagoblin.db.models import User, Collection, MediaEntry +from mediagoblin.db.models import User, Collection, MediaEntry, LocalUser from mediagoblin.notifications import add_comment_subscription @@ -50,7 +54,7 @@ from mediagoblin.notifications import add_comment_subscription @require_active_login def blog_edit(request): """ - View for editing an existing blog or creating a new blog + View for editing an existing blog or creating a new blog if user have not exceeded maximum allowed acount of blogs. """ url_user = request.matchdict.get('user', None) @@ -73,8 +77,8 @@ def blog_edit(request): if request.method=='POST' and form.validate(): _log.info("Here") blog = request.db.Blog() - blog.title = unicode(form.title.data) - blog.description = unicode(cleaned_markdown_conversion((form.description.data))) + blog.title = six.text_type(form.title.data) + blog.description = six.text_type(cleaned_markdown_conversion((form.description.data))) blog.author = request.user.id blog.generate_slug() @@ -91,7 +95,7 @@ def blog_edit(request): #Blog already exists. else: - blog = request.db.Blog.query.filter_by(slug=blog_slug).first() + blog = get_blog_by_slug(request, blog_slug) if not blog: return render_404(request) if request.method == 'GET': @@ -110,8 +114,8 @@ def blog_edit(request): 'app_config': mg_globals.app_config}) else: if request.method == 'POST' and form.validate(): - blog.title = unicode(form.title.data) - blog.description = unicode(cleaned_markdown_conversion((form.description.data))) + blog.title = six.text_type(form.title.data) + blog.description = six.text_type(cleaned_markdown_conversion((form.description.data))) blog.author = request.user.id blog.generate_slug() @@ -129,18 +133,17 @@ def blogpost_create(request): if request.method == 'POST' and form.validate(): blog_slug = request.matchdict.get('blog_slug') - blog = request.db.Blog.query.filter_by(slug=blog_slug, - author=request.user.id).first() + blog = get_blog_by_slug(request, blog_slug, author=request.user.id) if not blog: return render_404(request) blogpost = request.db.MediaEntry() blogpost.media_type = 'mediagoblin.media_types.blogpost' - blogpost.title = unicode(form.title.data) - blogpost.description = unicode(cleaned_markdown_conversion((form.description.data))) + blogpost.title = six.text_type(form.title.data) + blogpost.description = six.text_type(cleaned_markdown_conversion((form.description.data))) blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) - blogpost.license = unicode(form.license.data) or None - blogpost.uploader = request.user.id + blogpost.license = six.text_type(form.license.data) or None + blogpost.actor = request.user.id blogpost.generate_slug() set_blogpost_state(request, blogpost) @@ -168,12 +171,12 @@ def blogpost_create(request): @require_active_login def blogpost_edit(request): - + blog_slug = request.matchdict.get('blog_slug', None) blog_post_slug = request.matchdict.get('blog_post_slug', None) - blogpost = request.db.MediaEntry.query.filter_by(slug=blog_post_slug, uploader=request.user.id).first() - blog = request.db.Blog.query.filter_by(slug=blog_slug, author=request.user.id).first() + blogpost = request.db.MediaEntry.query.filter_by(slug=blog_post_slug, actor=request.user.id).first() + blog = get_blog_by_slug(request, blog_slug, author=request.user.id) if not blogpost or not blog: return render_404(request) @@ -186,10 +189,10 @@ def blogpost_edit(request): form = blog_forms.BlogPostEditForm(request.form, **defaults) if request.method == 'POST' and form.validate(): - blogpost.title = unicode(form.title.data) - blogpost.description = unicode(cleaned_markdown_conversion((form.description.data))) + blogpost.title = six.text_type(form.title.data) + blogpost.description = six.text_type(cleaned_markdown_conversion((form.description.data))) blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) - blogpost.license = unicode(form.license.data) + blogpost.license = six.text_type(form.license.data) set_blogpost_state(request, blogpost) blogpost.generate_slug() blogpost.save() @@ -209,21 +212,20 @@ def blogpost_edit(request): }) +@active_user_from_url @uses_pagination -def blog_dashboard(request, page): +def blog_dashboard(request, page, url_user=None): """ Dashboard for a blog, only accessible to the owner of the blog. """ - url_user = request.matchdict.get('user') - user = request.db.User.query.filter_by(username=url_user).one() blog_slug = request.matchdict.get('blog_slug', None) - blogs = request.db.Blog.query.filter_by(author=user.id) + blogs = request.db.Blog.query.filter_by(author=url_user.id) config = pluginapi.get_config('mediagoblin.media_types.blog') max_blog_count = config['max_blog_count'] - if (request.user and request.user.id == user.id) or (request.user and request.user.is_admin): + if request.user and (request.user.id == url_user.id or request.user.has_privilege(u'admin')): if blog_slug: - blog = blogs.filter(Blog.slug==blog_slug).first() + blog = get_blog_by_slug(request, blog_slug) if not blog: return render_404(request) else: @@ -238,32 +240,30 @@ def blog_dashboard(request, page): {'blog_posts_list': blog_posts_on_a_page, 'blog_slug':blog_slug, 'blog':blog, - 'user':user, + 'user':url_user, 'pagination':pagination }) - if not request.user or request.user.id != user.id or not blog_slug: + if not request.user or request.user.id != url_user.id or not blog_slug: blogs = blogs.all() return render_to_response( request, 'mediagoblin/blog/list_of_blogs.html', { 'blogs':blogs, - 'user':user, + 'user':url_user, 'max_blog_count':max_blog_count }) +@active_user_from_url @uses_pagination -def blog_post_listing(request, page): +def blog_post_listing(request, page, url_user=None): """ Page, listing all the blog posts of a particular blog. """ - blog_owner = request.matchdict.get('user') - blog_slug = request.matchdict.get('blog_slug', None) - owner_user = User.query.filter_by(username=blog_owner).one() - blog = request.db.Blog.query.filter_by(slug=blog_slug).first() - - if not owner_user or not blog: + blog_slug = request.matchdict['blog_slug'] + blog = get_blog_by_slug(request, blog_slug, author=url_user.id) + if not blog: return render_404(request) all_blog_posts = blog.get_all_blog_posts(u'processed').order_by(MediaEntry.created.desc()) @@ -276,20 +276,18 @@ def blog_post_listing(request, page): 'mediagoblin/blog/blog_post_listing.html', {'blog_posts': blog_posts_on_a_page, 'pagination': pagination, - 'blog_owner': blog_owner, + 'blog_owner': url_user, 'blog':blog }) - + @require_active_login def draft_view(request): - blog_slug = request.matchdict.get('blog_slug', None) blog_post_slug = request.matchdict.get('blog_post_slug', None) user = request.matchdict.get('user') - - blog = request.db.Blog.query.filter_by(author=request.user.id, slug=blog_slug).first() - blogpost = request.db.MediaEntry.query.filter_by(state = u'failed', uploader=request.user.id, slug=blog_post_slug).first() + blog = get_blog_by_slug(request, blog_slug, author=request.user.id) + blogpost = request.db.MediaEntry.query.filter_by(state = u'failed', actor=request.user.id, slug=blog_post_slug).first() if not blog or not blogpost: return render_404(request) @@ -300,23 +298,25 @@ def draft_view(request): {'blogpost':blogpost, 'blog': blog }) - - + + @require_active_login def blog_delete(request, **kwargs): """ - Deletes a blog and media entries, tags associated with it. + Deletes a blog and media entries, tags associated with it. """ url_user = request.matchdict.get('user') - owner_user = request.db.User.query.filter_by(username=url_user).first() + owner_user = request.db.LocalUser.query.filter( + LocalUser.username==url_user + ).first() blog_slug = request.matchdict.get('blog_slug', None) - blog = request.db.Blog.query.filter_by(slug=blog_slug, author=owner_user.id).first() + blog = get_blog_by_slug(request, blog_slug, author=owner_user.id) if not blog: - return render_404(reequest) + return render_404(request) form = blog_forms.ConfirmDeleteForm(request.form) - if request.user.id == blog.author or request.user.is_admin: + if request.user.id == blog.author or request.user.has_privilege(u'admin'): if request.method == 'POST' and form.validate(): if form.confirm.data is True: blog.delete() @@ -331,7 +331,7 @@ def blog_delete(request, **kwargs): return redirect(request, "mediagoblin.media_types.blog.blog_admin_dashboard", user=request.user.username) else: - if request.user.is_admin: + if request.user.has_privilege(u'admin'): add_message( request, WARNING, _("You are about to delete another user's Blog. " @@ -348,21 +348,23 @@ def blog_delete(request, **kwargs): _("The blog was not deleted because you have no rights.")) return redirect(request, "mediagoblin.media_types.blog.blog_admin_dashboard", user=request.user.username) - - + + def blog_about_view(request): """ Page containing blog description and statistics """ blog_slug = request.matchdict.get('blog_slug', None) url_user = request.matchdict.get('user', None) - - user = request.db.User.query.filter_by(username=url_user).first() - blog = request.db.Blog.query.filter_by(author=user.id, slug=blog_slug).first() - + + user = request.db.LocalUser.query.filter( + LocalUser.username==url_user + ).first() + blog = get_blog_by_slug(request, blog_slug, author=user.id) + if not user or not blog: return render_404(request) - + else: blog_posts_processed = blog.get_all_blog_posts(u'processed').count() return render_to_response( @@ -372,11 +374,3 @@ def blog_about_view(request): 'blog': blog, 'blogpost_count': blog_posts_processed }) - - - - - - - -