diff options
-rw-r--r-- | mediagoblin/routing.py | 3 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/media_details.html | 34 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/root.html | 6 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/user_pages/media.html | 41 | ||||
-rw-r--r-- | mediagoblin/templates/mediagoblin/user_pages/user.html | 26 | ||||
-rw-r--r-- | mediagoblin/user_pages/__init__.py | 0 | ||||
-rw-r--r-- | mediagoblin/user_pages/routing.py | 24 | ||||
-rw-r--r-- | mediagoblin/user_pages/views.py | 52 | ||||
-rw-r--r-- | mediagoblin/views.py | 4 |
9 files changed, 185 insertions, 5 deletions
diff --git a/mediagoblin/routing.py b/mediagoblin/routing.py index b47bec8d..356ef678 100644 --- a/mediagoblin/routing.py +++ b/mediagoblin/routing.py @@ -18,7 +18,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 def get_mapper(): mapping = Mapper() @@ -30,5 +30,6 @@ def get_mapper(): mapping.extend(auth_routes, '/auth') mapping.extend(submit_routes, '/submit') + mapping.extend(user_routes, '/u') return mapping diff --git a/mediagoblin/templates/mediagoblin/media_details.html b/mediagoblin/templates/mediagoblin/media_details.html new file mode 100644 index 00000000..a00354bc --- /dev/null +++ b/mediagoblin/templates/mediagoblin/media_details.html @@ -0,0 +1,34 @@ +{# +# 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" %} +{% block mediagoblin_content %} + + {# temporarily, an "image gallery" that isn't one really ;) #} + {% if media %} + <h2>Media details for {{media.title}}</h2> + <div> + <img src="{{ request.app.public_store.file_url( + media.media_files.main) }}" /> + + <br/>Uploaded: {{ media.created}} + <br/>Description: {{media.description}} + </div> + {% else %} + <p>Sorry, no such media found.<p/> + {% endif %} +{% endblock %} diff --git a/mediagoblin/templates/mediagoblin/root.html b/mediagoblin/templates/mediagoblin/root.html index 06a89f3f..2cb0a9c0 100644 --- a/mediagoblin/templates/mediagoblin/root.html +++ b/mediagoblin/templates/mediagoblin/root.html @@ -43,8 +43,10 @@ <ul> {% for entry in media_entries %} <li> - <img src="{{ request.app.public_store.file_url( - entry['media_files']['thumb']) }}" /> + <a href="{{ request.urlgen('mediagoblin.user_pages.media_home', + user= entry.uploader.username, m_id= entry._id) }}"> + <img src="{{ request.app.public_store.file_url( + entry['media_files']['thumb']) }}" /></a> </li> {% endfor %} </ul> diff --git a/mediagoblin/templates/mediagoblin/user_pages/media.html b/mediagoblin/templates/mediagoblin/user_pages/media.html new file mode 100644 index 00000000..08cc9251 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/user_pages/media.html @@ -0,0 +1,41 @@ +{# +# 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" %} +{% block mediagoblin_content %} + + {# temporarily, an "image gallery" that isn't one really ;) #} + {% if media %} + <h2>Media details for <a + href="{{ request.urlgen('mediagoblin.user_pages.user_home', + user= media.uploader.username) }}">{{media.uploader.username}}</a> + / {{media.title}} + </h2> + <div> + <img src="{{ request.app.public_store.file_url( + media.media_files.main) }}" /> + + <br/>Uploaded on {{ "%4d-%02d-%02d"|format(media.created.year, + media.created.month,media.created.day)}} by <a + href="{{ request.urlgen('mediagoblin.user_pages.user_home', + user= media.uploader.username) }}">{{media.uploader.username}}</a> + <br/>Description: {{media.description}} + </div> + {% else %} + <p>Sorry, no such media found.<p/> + {% endif %} +{% endblock %} diff --git a/mediagoblin/templates/mediagoblin/user_pages/user.html b/mediagoblin/templates/mediagoblin/user_pages/user.html new file mode 100644 index 00000000..4ad34f51 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/user_pages/user.html @@ -0,0 +1,26 @@ +{# +# 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" %} +{% block mediagoblin_content -%} + {% if user %} + <h2>User page for '{{user.username}}'</h2> + {{user}} + {% else %} + <p>Sorry, no such user found.<p/> + {% endif %} +{% endblock %} diff --git a/mediagoblin/user_pages/__init__.py b/mediagoblin/user_pages/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/mediagoblin/user_pages/__init__.py diff --git a/mediagoblin/user_pages/routing.py b/mediagoblin/user_pages/routing.py new file mode 100644 index 00000000..10ecd4fd --- /dev/null +++ b/mediagoblin/user_pages/routing.py @@ -0,0 +1,24 @@ +1# 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 + +user_routes = [ + Route('mediagoblin.user_pages.user_home', "/{user}", + controller="mediagoblin.user_pages.views:user_home"), + Route('mediagoblin.user_pages.media_home', r'/{user}/m/{m_id}', + requirements=dict(m_id="[0-9a-fA-F]{24}"), + controller="mediagoblin.user_pages.views:media_home")] diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py new file mode 100644 index 00000000..b1a301d4 --- /dev/null +++ b/mediagoblin/user_pages/views.py @@ -0,0 +1,52 @@ +# 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 webob import Response +from mongokit import ObjectId +import wtforms +#from mongokit import ObjectId + +def user_home(request): + """'Homepage' of a User()""" + user = request.db.User.find_one( + {'username': request.matchdict['user']}) + + medias = request.db.MediaEntry.find() + + template = request.template_env.get_template( + 'mediagoblin/user_pages/user.html') + return Response( + template.render( + {'request': request, + 'user': user, + 'medias': medias})) + +def media_home(request): + """'Homepage' of a MediaEntry()""" + media = request.db.MediaEntry.find_one( + ObjectId(request.matchdict['m_id'])) + + #check that media uploader and user correspondent + if media['uploader'].get('username') != request.matchdict['user']: + #TODO: How do I throw an error 404? + pass + + template = request.template_env.get_template( + 'mediagoblin/user_pages/media.html') + return Response( + template.render( + {'request': request, + 'media': media})) diff --git a/mediagoblin/views.py b/mediagoblin/views.py index 3728d4aa..f4c0598a 100644 --- a/mediagoblin/views.py +++ b/mediagoblin/views.py @@ -18,13 +18,13 @@ import datetime from webob import Response, exc import wtforms - +from mongokit import ObjectId from mediagoblin import models def root_view(request): media_entries = request.db.MediaEntry.find( {u'state': u'processed'}) - + template = request.template_env.get_template( 'mediagoblin/root.html') return Response( |