Merge remote-tracking branch 'gsoc2016/Subtitle-1'
[mediagoblin.git] / mediagoblin / edit / views.py
index b3f4318b4c977f9e846b5306a2281ab5756a472a..717241e8b63ef48989c13a1ef36963b904bb4fd5 100644 (file)
@@ -1,4 +1,4 @@
-# GNU MediaGoblin -- federated, autonomous media hosting
+
 # Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
 #
 # This program is free software: you can redistribute it and/or modify
@@ -17,7 +17,6 @@
 import six
 
 from datetime import datetime
-import os
 
 from itsdangerous import BadSignature
 from pyld import jsonld
@@ -35,7 +34,7 @@ from mediagoblin.edit.lib import may_edit_media
 from mediagoblin.decorators import (require_active_login, active_user_from_url,
                             get_media_entry_by_id, user_may_alter_collection,
                             get_user_collection, user_has_privilege,
-                            user_not_banned, path_subtitle)
+                            user_not_banned, user_may_delete_media)
 from mediagoblin.tools.crypto import get_timed_signer_url
 from mediagoblin.tools.metadata import (compact_and_validate, DEFAULT_CHECKER,
                                         DEFAULT_SCHEMA)
@@ -56,6 +55,10 @@ import mimetypes
 @get_media_entry_by_id
 @require_active_login
 def edit_media(request, media):
+    # If media is not processed, return NotFound.
+    if not media.state == u'processed':
+        return render_404(request)
+
     if not may_edit_media(request, media):
         raise Forbidden("User may not edit this media")
 
@@ -67,7 +70,7 @@ def edit_media(request, media):
         license=media.license)
 
     form = forms.EditForm(
-        request.form,
+        request.method=='POST' and request.form or None,
         **defaults)
 
     if request.method == 'POST' and form.validate():
@@ -116,6 +119,10 @@ UNSAFE_MIMETYPES = [
 @get_media_entry_by_id
 @require_active_login
 def edit_attachments(request, media):
+    # If media is not processed, return NotFound.
+    if not media.state == u'processed':
+        return render_404(request)
+
     if mg_globals.app_config['allow_attachments']:
         form = forms.EditAttachmentsForm()
 
@@ -182,64 +189,6 @@ def edit_attachments(request, media):
     else:
         raise Forbidden("Attachments are disabled")
 
-@get_media_entry_by_id
-@require_active_login
-def edit_subtitles(request, media):
-    if mg_globals.app_config['allow_subtitles']:
-        form = forms.EditSubtitlesForm(request.form)
-
-        # Add any subtitles
-        if 'subtitle_file' in request.files \
-            and request.files['subtitle_file']:
-            if mimetypes.guess_type(
-                    request.files['subtitle_file'].filename)[0] in \
-                    UNSAFE_MIMETYPES:
-                public_filename = secure_filename('{0}.notsafe'.format(
-                    request.files['subtitle_file'].filename))
-            else:
-                public_filename = secure_filename(
-                        request.files['subtitle_file'].filename)
-
-            subtitle_public_filepath \
-                = mg_globals.public_store.get_unique_filepath(
-                ['media_entries', six.text_type(media.id), 'subtitle',
-                 public_filename])
-
-            subtitle_public_file = mg_globals.public_store.get_file(
-                subtitle_public_filepath, 'wb')
-
-            try:
-                subtitle_public_file.write(
-                    request.files['subtitle_file'].stream.read())
-            finally:
-                request.files['subtitle_file'].stream.close()
-
-            media.subtitle_files.append(dict(
-                    name=form.subtitle_language.data \
-                        or request.files['subtitle_file'].filename,
-                    filepath=subtitle_public_filepath,
-                    created=datetime.utcnow(),
-                    ))
-
-            media.save()
-
-            messages.add_message(
-                request,
-                messages.SUCCESS,
-                _("You added the subttile %s!") %
-                    (form.subtitle_language.data or
-                     request.files['subtitle_file'].filename))
-
-            return redirect(request,
-                            location=media.url_for_self(request.urlgen))
-        return render_to_response(
-            request,
-            'mediagoblin/edit/subtitles.html',
-            {'media': media,
-             'form': form})
-    else:
-        raise Forbidden("Subtitles are disabled")
-
 @require_active_login
 def legacy_edit_profile(request):
     """redirect the old /edit/profile/?username=USER to /u/USER/edit/"""
@@ -270,7 +219,8 @@ def edit_profile(request, url_user=None):
     else:
         location = user.get_location.name
 
-    form = forms.EditProfileForm(request.form,
+    form = forms.EditProfileForm(
+        request.method == 'POST' and request.form or None,
         url=user.url,
         bio=user.bio,
         location=location)
@@ -286,6 +236,8 @@ def edit_profile(request, url_user=None):
             location = user.get_location
             location.name = six.text_type(form.location.data)
             location.save()
+        else:
+            user.location = None
 
         user.save()
 
@@ -311,7 +263,8 @@ EMAIL_VERIFICATION_TEMPLATE = (
 @require_active_login
 def edit_account(request):
     user = request.user
-    form = forms.EditAccountForm(request.form,
+    form = forms.EditAccountForm(
+        request.method == 'POST' and request.form or None,
         wants_comment_notification=user.wants_comment_notification,
         license_preference=user.license_preference,
         wants_notifications=user.wants_notifications)
@@ -409,7 +362,7 @@ def edit_collection(request, collection):
         description=collection.description)
 
     form = forms.EditCollectionForm(
-        request.form,
+        request.method == 'POST' and request.form or None,
         **defaults)
 
     if request.method == 'POST' and form.validate():
@@ -502,9 +455,11 @@ def verify_email(request):
         user=user.username)
 
 
+@require_active_login
 def change_email(request):
     """ View to change the user's email """
-    form = forms.ChangeEmailForm(request.form)
+    form = forms.ChangeEmailForm(
+        request.method == 'POST' and request.form or None)
     user = request.user
 
     # If no password authentication, no need to enter a password
@@ -557,7 +512,12 @@ def change_email(request):
 @require_active_login
 @get_media_entry_by_id
 def edit_metadata(request, media):
-    form = forms.EditMetaDataForm(request.form)
+    # If media is not processed, return NotFound.
+    if not media.state == u'processed':
+        return render_404(request)
+
+    form = forms.EditMetaDataForm(
+        request.method == 'POST' and request.form or None)
     if request.method == "POST" and form.validate():
         metadata_dict = dict([(row['identifier'],row['value'])
                             for row in form.media_metadata.data])
@@ -578,15 +538,4 @@ def edit_metadata(request, media):
         request,
         'mediagoblin/edit/metadata.html',
         {'form':form,
-         'media':media})
-
-
-@require_active_login
-@path_subtitle
-def custom_subtitles(request,path=None):
-    path = path.encode('ascii','ignore')[1:-1]
-    return render_to_response(
-        request,
-        "mediagoblin/user_pages/custom_subtitles.html",
-        {"path": path}
-        )
\ No newline at end of file
+         'media':media})
\ No newline at end of file