Starting "edit" functionality.
authorElrond <elrond+mediagoblin.org@samba-tng.org>
Thu, 26 May 2011 21:09:33 +0000 (23:09 +0200)
committerElrond <elrond+mediagoblin.org@samba-tng.org>
Thu, 26 May 2011 21:09:33 +0000 (23:09 +0200)
This adds a link to the "edit" form, the form, the view for
displaying the form and that's about it.

mediagoblin/decorators.py
mediagoblin/edit/__init__.py [new file with mode: 0644]
mediagoblin/edit/forms.py [new file with mode: 0644]
mediagoblin/edit/routing.py [new file with mode: 0644]
mediagoblin/edit/views.py [new file with mode: 0644]
mediagoblin/routing.py
mediagoblin/templates/mediagoblin/edit/edit.html [new file with mode: 0644]
mediagoblin/templates/mediagoblin/user_pages/media.html

index ff3f0b5e67dfe6ec60a6f7308fdd2e3b207ee332..fe631112292c8a44c5f4d8e8b7e1274289817892 100644 (file)
@@ -99,3 +99,23 @@ def get_user_media_entry(controller):
         return controller(request, media=media, *args, **kwargs)
 
     return _make_safe(wrapper, controller)
+
+def get_media_entry_by_id(controller):
+    """
+    Pass in a MediaEntry based off of a url component
+    """
+    def wrapper(request, *args, **kwargs):
+        try:
+            media = request.db.MediaEntry.find_one(
+                {'_id': ObjectId(request.matchdict['media']),
+                 'state': 'processed'})
+        except InvalidId:
+            return exc.HTTPNotFound()
+
+        # Still no media?  Okay, 404.
+        if not media:
+            return exc.HTTPNotFound()
+
+        return controller(request, media=media, *args, **kwargs)
+
+    return _make_safe(wrapper, controller)
diff --git a/mediagoblin/edit/__init__.py b/mediagoblin/edit/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/mediagoblin/edit/forms.py b/mediagoblin/edit/forms.py
new file mode 100644 (file)
index 0000000..ea25141
--- /dev/null
@@ -0,0 +1,27 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 Free Software Foundation, Inc
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+import wtforms
+
+
+class EditForm(wtforms.Form):
+    title = wtforms.TextField(
+        'Title',
+        [wtforms.validators.Length(min=0, max=500)])
+    slug = wtforms.TextField(
+        'Slug')
+    description = wtforms.TextAreaField('Description of this work')
diff --git a/mediagoblin/edit/routing.py b/mediagoblin/edit/routing.py
new file mode 100644 (file)
index 0000000..d7396a6
--- /dev/null
@@ -0,0 +1,22 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 Free Software Foundation, Inc
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+from routes.route import Route
+
+edit_routes = [
+    Route('mediagoblin.edit.edit_media', "/{media}/",
+        controller="mediagoblin.edit.views:edit_media"),
+]
diff --git a/mediagoblin/edit/views.py b/mediagoblin/edit/views.py
new file mode 100644 (file)
index 0000000..11dd58b
--- /dev/null
@@ -0,0 +1,23 @@
+
+
+from webob import Response
+
+from mediagoblin.edit import forms
+from mediagoblin.decorators import require_active_login, get_media_entry_by_id
+
+@get_media_entry_by_id
+@require_active_login
+def edit_media(request, media):
+    form = forms.EditForm(request.POST,
+        title = media['title'],
+        slug = media['slug'],
+        description = media['description'])
+
+    # render
+    template = request.template_env.get_template(
+        'mediagoblin/edit/edit.html')
+    return Response(
+        template.render(
+            {'request': request,
+             'media': media,
+             'form': form}))
index 356ef678853f2ded12374793dfcfadb131669465..b854c85a5d3dcdf40393c095922011a257902f4d 100644 (file)
@@ -19,6 +19,7 @@ from routes import Mapper
 from mediagoblin.auth.routing import auth_routes
 from mediagoblin.submit.routing import submit_routes
 from mediagoblin.user_pages.routing import user_routes
+from mediagoblin.edit.routing import edit_routes
 
 def get_mapper():
     mapping = Mapper()
@@ -31,5 +32,6 @@ def get_mapper():
     mapping.extend(auth_routes, '/auth')
     mapping.extend(submit_routes, '/submit')
     mapping.extend(user_routes, '/u')
+    mapping.extend(edit_routes, '/edit')
 
     return mapping
diff --git a/mediagoblin/templates/mediagoblin/edit/edit.html b/mediagoblin/templates/mediagoblin/edit/edit.html
new file mode 100644 (file)
index 0000000..72773cb
--- /dev/null
@@ -0,0 +1,38 @@
+{#
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 Free Software Foundation, Inc
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#}
+{% extends "mediagoblin/base.html" %}
+
+{% import "/mediagoblin/utils/wtforms.html" as wtforms_util %}
+
+{% block mediagoblin_content %}
+  <h1>Edit details for {{ media.title }}</h1>
+
+  <form action="{{ request.urlgen('mediagoblin.edit.edit_media',
+                               media= media._id) }}"
+        method="POST" enctype="multipart/form-data">
+    <table>
+      {{ wtforms_util.render_table(form) }}
+      <tr>
+        <td></td>
+        <td><input type="submit" value="submit" class="button_green" /></td>
+      </tr>
+    </table>
+  </form>
+  <img src="{{ request.app.public_store.file_url(
+         media['media_files']['thumb']) }}" />
+{% endblock %}    
index 036bf7262d621e6a238cf23b09c03b8b3e55563d..f13c32e3c8f037fd488ee31234e4956962eb695b 100644 (file)
@@ -41,6 +41,9 @@
       {{- media.uploader().username }}</a>
     <br />
     Description: {{ media.description }}
+    <br />
+    <a href="{{ request.urlgen('mediagoblin.edit.edit_media',
+                               media= media._id) }}">Edit</a>
   </div>
   {% else %}
   <p>Sorry, no such media found.<p/>