Implement simple media detail page
This patch creates a "homepage" for each media. The URL is /u/<username>/m/<objID>. On it we display the media and some details. It is ugly and lacking some stuff but it works. The only thing left to do is to throw an 404 error if the <username> and the media uploader don't correspond. - Also create a user "home page" while at it. It is merely a place holder for now though. - Link from the entries on the homepage, to the media pages, so we actually find them. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
This commit is contained in:
parent
9d97145fe4
commit
9a16e16ffa
@ -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
|
||||
|
34
mediagoblin/templates/mediagoblin/media_details.html
Normal file
34
mediagoblin/templates/mediagoblin/media_details.html
Normal file
@ -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 %}
|
@ -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>
|
||||
|
41
mediagoblin/templates/mediagoblin/user_pages/media.html
Normal file
41
mediagoblin/templates/mediagoblin/user_pages/media.html
Normal file
@ -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 %}
|
26
mediagoblin/templates/mediagoblin/user_pages/user.html
Normal file
26
mediagoblin/templates/mediagoblin/user_pages/user.html
Normal file
@ -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 %}
|
0
mediagoblin/user_pages/__init__.py
Normal file
0
mediagoblin/user_pages/__init__.py
Normal file
24
mediagoblin/user_pages/routing.py
Normal file
24
mediagoblin/user_pages/routing.py
Normal file
@ -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")]
|
52
mediagoblin/user_pages/views.py
Normal file
52
mediagoblin/user_pages/views.py
Normal file
@ -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}))
|
@ -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(
|
||||
|
Loading…
x
Reference in New Issue
Block a user