Merge remote-tracking branch 'gsoc2016/Subtitle-1'
[mediagoblin.git] / mediagoblin / media_types / blog / views.py
index 042881e4b6796fdfc03c9397566272dd12508bd1..288a47ae08451239447a76e7c20dcda0f066b6d2 100644 (file)
@@ -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,9 +28,10 @@ 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,
                             get_media_entry_by_id, user_may_alter_collection,
                             get_user_collection, uses_pagination)
@@ -42,7 +45,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 +53,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 +76,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()
 
@@ -83,15 +86,17 @@ def blog_edit(request):
                         user=request.user.username
                        )
         else:
-            add_message(request, ERROR, "Welcome! You already have created \
-                                                        maximum number of blogs.")
+            messages.add_message(
+                request,
+                messages.ERROR,
+                "Welcome! You already have created maximum number of blogs.")
             return redirect(request, "mediagoblin.media_types.blog.blog_admin_dashboard",
                         user=request.user.username)
 
 
     #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,13 +115,16 @@ 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()
 
                 blog.save()
-                add_message(request, SUCCESS, "Your blog is updated.")
+                messages.add_message(
+                    request,
+                    messages.SUCCESS,
+                    "Your blog is updated.")
                 return redirect(request, "mediagoblin.media_types.blog.blog-dashboard",
                         user=request.user.username,
                         blog_slug=blog.slug)
@@ -129,18 +137,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)
@@ -152,7 +159,10 @@ def blogpost_create(request):
         blog_post_data.media_entry = blogpost.id
         blog_post_data.save()
 
-        add_message(request, SUCCESS, _('Woohoo! Submitted!'))
+        messages.add_message(
+            request,
+            messages.SUCCESS,
+            _('Woohoo! Submitted!'))
         add_comment_subscription(request.user, blogpost)
         return redirect(request, "mediagoblin.media_types.blog.blog-dashboard",
                         user=request.user.username,
@@ -168,12 +178,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,15 +196,18 @@ 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()
 
-        add_message(request, SUCCESS, _('Woohoo! edited blogpost is submitted'))
+        messages.add_message(
+            request,
+            messages.SUCCESS,
+            _('Woohoo! edited blogpost is submitted'))
         return redirect(request, "mediagoblin.media_types.blog.blog-dashboard",
                         user=request.user.username,
                         blog_slug=blog.slug)
@@ -222,7 +235,7 @@ def blog_dashboard(request, page, url_user=None):
     max_blog_count = config['max_blog_count']
     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:
@@ -258,8 +271,8 @@ def blog_post_listing(request, page, url_user=None):
     """
     Page, listing all the blog posts of a particular blog.
     """
-    blog_slug = request.matchdict.get('blog_slug', None)
-    blog = request.db.Blog.query.filter_by(slug=blog_slug).first()
+    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)
 
@@ -276,17 +289,15 @@ def blog_post_listing(request, page, url_user=None):
          '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)
@@ -297,40 +308,47 @@ 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.has_privilege(u'admin'):
         if request.method == 'POST' and form.validate():
             if form.confirm.data is True:
                 blog.delete()
-                add_message(
-                request, SUCCESS, _('You deleted the Blog.'))
+                messages.add_message(
+                    request,
+                    messages.SUCCESS,
+                    _('You deleted the Blog.'))
                 return redirect(request, "mediagoblin.media_types.blog.blog_admin_dashboard",
                         user=request.user.username)
             else:
-                add_message(
-                request, ERROR,
-                _("The media was not deleted because you didn't check that you were sure."))
+                messages.add_message(
+                    request,
+                    messages.ERROR,
+                    _("The media was not deleted because you didn't check "
+                      "that you were sure."))
                 return redirect(request, "mediagoblin.media_types.blog.blog_admin_dashboard",
                         user=request.user.username)
         else:
             if request.user.has_privilege(u'admin'):
-                add_message(
-                    request, WARNING,
+                messages.add_message(
+                    request,
+                    messages.WARNING,
                     _("You are about to delete another user's Blog. "
                       "Proceed with caution."))
             return render_to_response(
@@ -340,26 +358,31 @@ def blog_delete(request, **kwargs):
             'form':form
             })
     else:
-        add_message(
-        request, ERROR,
-        _("The blog was not deleted because you have no rights."))
+        messages.add_message(
+            request,
+            messages.ERROR,
+            _("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()
+
+    if user:
+        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(
@@ -369,11 +392,3 @@ def blog_about_view(request):
                 'blog': blog,
                 'blogpost_count': blog_posts_processed
                 })
-        
-    
-    
-
-
-
-
-