diff options
Diffstat (limited to 'mediagoblin/user_pages/views.py')
-rw-r--r-- | mediagoblin/user_pages/views.py | 74 |
1 files changed, 44 insertions, 30 deletions
diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index dea47fbf..61c23f16 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -18,8 +18,8 @@ import logging import datetime from mediagoblin import messages, mg_globals -from mediagoblin.db.models import (MediaEntry, Collection, CollectionItem, - User) +from mediagoblin.db.models import (MediaEntry, MediaTag, Collection, + CollectionItem, User) from mediagoblin.tools.response import render_to_response, render_404, redirect from mediagoblin.tools.translate import pass_to_ugettext as _ from mediagoblin.tools.pagination import Pagination @@ -81,10 +81,17 @@ def user_home(request, page): @uses_pagination def user_gallery(request, page, url_user=None): """'Gallery' of a User()""" + tag = request.matchdict.get('tag', None) cursor = MediaEntry.query.filter_by( uploader=url_user.id, state=u'processed').order_by(MediaEntry.created.desc()) + # Filter potentially by tag too: + if tag: + cursor = cursor.filter( + MediaEntry.tags_helper.any( + MediaTag.slug == request.matchdict['tag'])) + # Paginate gallery pagination = Pagination(page, cursor) media_entries = pagination() @@ -97,7 +104,7 @@ def user_gallery(request, page, url_user=None): return render_to_response( request, 'mediagoblin/user_pages/gallery.html', - {'user': url_user, + {'user': url_user, 'tag': tag, 'media_entries': media_entries, 'pagination': pagination}) @@ -173,7 +180,7 @@ def media_post_comment(request, media): return redirect(request, location=media.url_for_self(request.urlgen)) -@get_user_media_entry +@get_media_entry_by_id @require_active_login def media_collect(request, media): """Add media to collection submission""" @@ -197,30 +204,31 @@ def media_collect(request, media): # If we are here, method=POST and the form is valid, submit things. # If the user is adding a new collection, use that: - if request.form['collection_title']: + if form.collection_title.data: # Make sure this user isn't duplicating an existing collection existing_collection = Collection.query.filter_by( creator=request.user.id, - title=request.form['collection_title']).first() + title=form.collection_title.data).first() if existing_collection: messages.add_message(request, messages.ERROR, - _('You already have a collection called "%s"!' - % collection.title)) + _('You already have a collection called "%s"!') + % existing_collection.title) return redirect(request, "mediagoblin.user_pages.media_home", - user=request.user.username, - media=media.id) + user=media.get_uploader.username, + media=media.slug_or_id) collection = Collection() - collection.title = request.form['collection_title'] - collection.description = request.form.get('collection_description') + collection.title = form.collection_title.data + collection.description = form.collection_description.data collection.creator = request.user.id collection.generate_slug() collection.save() # Otherwise, use the collection selected from the drop-down else: - collection = Collection.query.filter_by( - id=request.form.get('collection')).first() + collection = form.collection.data + if collection and collection.creator != request.user.id: + collection = None # Make sure the user actually selected a collection if not collection: @@ -229,7 +237,7 @@ def media_collect(request, media): _('You have to select or add a collection')) return redirect(request, "mediagoblin.user_pages.media_collect", user=media.get_uploader.username, - media=media.id) + media_id=media.id) # Check whether media already exists in collection @@ -237,14 +245,13 @@ def media_collect(request, media): media_entry=media.id, collection=collection.id).first(): messages.add_message(request, messages.ERROR, - _('"%s" already in collection "%s"' - % (media.title, collection.title))) + _('"%s" already in collection "%s"') + % (media.title, collection.title)) else: # Add item to collection collection_item = request.db.CollectionItem() collection_item.collection = collection.id collection_item.media_entry = media.id - collection_item.author = request.user.id - collection_item.note = request.form['note'] + collection_item.note = form.note.data collection_item.save() collection.items = collection.items + 1 @@ -254,12 +261,12 @@ def media_collect(request, media): media.save() messages.add_message(request, messages.SUCCESS, - _('"%s" added to collection "%s"' - % (media.title, collection.title))) + _('"%s" added to collection "%s"') + % (media.title, collection.title)) return redirect(request, "mediagoblin.user_pages.media_home", user=media.get_uploader.username, - media=media.id) + media=media.slug_or_id) #TODO: Why does @user_may_delete_media not implicate @require_active_login? @@ -309,6 +316,9 @@ def user_collection(request, page, url_user=None): get_creator=url_user, slug=request.matchdict['collection']).first() + if not collection: + return render_404(request) + cursor = collection.get_collection_items() pagination = Pagination(page, cursor) @@ -515,6 +525,8 @@ def collection_atom_feed(request): collection = Collection.query.filter_by( creator=user.id, slug=request.matchdict['collection']).first() + if not collection: + return render_404(request) cursor = CollectionItem.query.filter_by( collection=collection.id) \ @@ -539,14 +551,16 @@ def collection_atom_feed(request): 'href': push_url}) feed = AtomFeed( - "MediaGoblin: Feed for %s's collection %s" % (request.matchdict['user'], collection.title), - feed_url=request.url, - id='tag:{host},{year}:collection.user-{user}.title-{title}'.format( - host=request.host, - year=datetime.datetime.today().strftime('%Y'), - user=request.matchdict['user'], - title=collection.title), - links=atomlinks) + "MediaGoblin: Feed for %s's collection %s" % + (request.matchdict['user'], collection.title), + feed_url=request.url, + id=u'tag:{host},{year}:gnu-mediagoblin.{user}.collection.{slug}'\ + .format( + host=request.host, + year=collection.created.strftime('%Y'), + user=request.matchdict['user'], + slug=collection.slug), + links=atomlinks) for item in cursor: entry = item.get_media_entry |