Merge remote branch 'remotes/hanaku/pagination'
[mediagoblin.git] / mediagoblin / user_pages / views.py
1 # GNU MediaGoblin -- federated, autonomous media hosting
2 # Copyright (C) 2011 Free Software Foundation, Inc
3 #
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU Affero General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU Affero General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17 from webob import Response, exc
18 from mediagoblin.db.util import ObjectId, DESCENDING
19 from mediagoblin.util import Pagination
20
21 from mediagoblin.decorators import uses_pagination
22
23 @uses_pagination
24 def user_home(request):
25 """'Homepage' of a User()"""
26 user = request.db.User.find_one({
27 'username': request.matchdict['user'],
28 'status': 'active'})
29 if not user:
30 return exc.HTTPNotFound()
31
32 cursor = request.db.MediaEntry \
33 .find({'uploader': user, 'state': 'processed'}) \
34 .sort('created', DESCENDING)
35
36
37 pagination = Pagination( int(request.str_GET['page']), cursor)
38 media_entries = pagination()
39
40 #if no data is available, return NotFound
41 if media_entries == None:
42 return exc.HTTPNotFound()
43
44 template = request.template_env.get_template(
45 'mediagoblin/user_pages/user.html')
46
47 return Response(
48 template.render(
49 {'request': request,
50 'user': user,
51 'media_entries': media_entries,
52 'pagination': pagination}))
53
54 def media_home(request):
55 """'Homepage' of a MediaEntry()"""
56 media = request.db.MediaEntry.find_one({
57 '_id': ObjectId(request.matchdict['m_id']),
58 'state': 'processed'})
59
60 # Check that media uploader and user correspond.
61 if not media or \
62 media['uploader'].get('username') != request.matchdict['user']:
63 return exc.HTTPNotFound()
64
65 template = request.template_env.get_template(
66 'mediagoblin/user_pages/media.html')
67 return Response(
68 template.render(
69 {'request': request,
70 'media': media}))
71