Fix #5513 - Can't delete blog post drafts
authorayleph <ayleph@thisshitistemp.com>
Wed, 28 Jun 2017 05:45:42 +0000 (22:45 -0700)
committerAndrew Browning <ayleph@thisshitistemp.com>
Tue, 15 Aug 2017 05:43:58 +0000 (01:43 -0400)
Modify the @get_media_entry_by_id decorator to return media regardless
of processing state. Separately modify all view functions that use the
@get_media_entry_by_id decorator to require that the media be in the
processed state, other than for the media_confirm_delete view. This
allows blog post drafts to be deleted without returning a 404. Further,
it adds the ability to delete unprocessed media in the future, which
would be a nice addition to the user processing panel.

mediagoblin/decorators.py
mediagoblin/edit/views.py
mediagoblin/user_pages/views.py

index daeddb3f199352258988eef024d4022b705cce29..2b8343b853054d43939cf29ded776f5002b0f425 100644 (file)
@@ -268,8 +268,7 @@ def get_media_entry_by_id(controller):
     @wraps(controller)
     def wrapper(request, *args, **kwargs):
         media = MediaEntry.query.filter_by(
-                id=request.matchdict['media_id'],
-                state=u'processed').first()
+                id=request.matchdict['media_id']).first()
         # Still no media?  Okay, 404.
         if not media:
             return render_404(request)
index b15fb2e796bbdb455698384379da37d4ae4442f1..17aea9229446015e91a55ff273786b5e6b76f44a 100644 (file)
@@ -55,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")
 
@@ -115,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()
 
@@ -499,6 +507,10 @@ def change_email(request):
 @require_active_login
 @get_media_entry_by_id
 def edit_metadata(request, media):
+    # If media is not processed, return NotFound.
+    if not media.state == u'processed':
+        return render_404(request)
+
     form = forms.EditMetaDataForm(request.form)
     if request.method == "POST" and form.validate():
         metadata_dict = dict([(row['identifier'],row['value'])
index 484d27cd9ff42c3c5567e73c6edb26120aead5ab..ab235695ef6cbc379548e899909836bcad10d304 100644 (file)
@@ -180,6 +180,10 @@ def media_post_comment(request, media):
     if not request.method == 'POST':
         raise MethodNotAllowed()
 
+    # If media is not processed, return NotFound.
+    if not media.state == u'processed':
+        return render_404(request)
+
     comment = request.db.TextComment()
     comment.actor = request.user.id
     comment.content = six.text_type(request.form['comment_content'])
@@ -232,6 +236,10 @@ def media_preview_comment(request):
 def media_collect(request, media):
     """Add media to collection submission"""
 
+    # If media is not processed, return NotFound.
+    if not media.state == u'processed':
+        return render_404(request)
+
     form = user_forms.MediaCollectForm(request.form)
     # A user's own collections:
     form.collection.query = Collection.query.filter_by(