diff options
Diffstat (limited to 'mediagoblin/submit/views.py')
-rw-r--r-- | mediagoblin/submit/views.py | 78 |
1 files changed, 49 insertions, 29 deletions
diff --git a/mediagoblin/submit/views.py b/mediagoblin/submit/views.py index 42c378a8..7bbfb645 100644 --- a/mediagoblin/submit/views.py +++ b/mediagoblin/submit/views.py @@ -14,6 +14,8 @@ # 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 six + from mediagoblin import messages import mediagoblin.mg_globals as mg_globals @@ -21,17 +23,17 @@ import logging _log = logging.getLogger(__name__) - +from mediagoblin.db.models import Collection +from mediagoblin.tools.federation import create_activity from mediagoblin.tools.translate import pass_to_ugettext as _ from mediagoblin.tools.response import render_to_response, redirect from mediagoblin.decorators import require_active_login, user_has_privilege from mediagoblin.submit import forms as submit_forms -from mediagoblin.messages import add_message, SUCCESS -from mediagoblin.media_types import \ - InvalidFileType, FileTypeNotSupported +from mediagoblin.media_types import FileTypeNotSupported from mediagoblin.submit.lib import \ check_file_field, submit_media, get_upload_file_limits, \ FileUploadLimit, UserUploadLimit, UserPastUploadLimit +from mediagoblin.user_pages.lib import add_media_to_collection @require_active_login @@ -48,6 +50,17 @@ def submit_start(request): max_file_size=max_file_size, upload_limit=upload_limit, uploaded=request.user.uploaded) + users_collections = Collection.query.filter_by( + actor=request.user.id, + type=Collection.USER_DEFINED_TYPE + ).order_by(Collection.title) + + # Only show the Collections dropdown if the user has some + # collections set up + if users_collections.count() > 0: + submit_form.collection.query = users_collections + else: + del submit_form.collection if request.method == 'POST' and submit_form.validate(): if not check_file_field(request, 'file'): @@ -55,18 +68,27 @@ def submit_start(request): _(u'You must provide a file.')) else: try: - submit_media( + media = submit_media( mg_app=request.app, user=request.user, submitted_file=request.files['file'], filename=request.files['file'].filename, - title=unicode(submit_form.title.data), - description=unicode(submit_form.description.data), - license=unicode(submit_form.license.data) or None, + title=six.text_type(submit_form.title.data), + description=six.text_type(submit_form.description.data), + license=six.text_type(submit_form.license.data) or None, tags_string=submit_form.tags.data, - upload_limit=upload_limit, max_file_size=max_file_size, urlgen=request.urlgen) - add_message(request, SUCCESS, _('Woohoo! Submitted!')) + if submit_form.collection and submit_form.collection.data: + add_media_to_collection( + submit_form.collection.data, media) + create_activity( + "add", media, request.user, + target=submit_form.collection.data) + + messages.add_message( + request, + messages.SUCCESS, + _('Woohoo! Submitted!')) return redirect(request, "mediagoblin.user_pages.user_home", user=request.user.username) @@ -87,18 +109,10 @@ def submit_start(request): _('Sorry, you have reached your upload limit.')) return redirect(request, "mediagoblin.user_pages.user_home", user=request.user.username) - + except FileTypeNotSupported as e: + submit_form.file.errors.append(e) except Exception as e: - ''' - This section is intended to catch exceptions raised in - mediagoblin.media_types - ''' - if isinstance(e, InvalidFileType) or \ - isinstance(e, FileTypeNotSupported): - submit_form.file.errors.append( - e) - else: - raise + raise return render_to_response( request, @@ -117,24 +131,30 @@ def add_collection(request, media=None): if request.method == 'POST' and submit_form.validate(): collection = request.db.Collection() - collection.title = unicode(submit_form.title.data) - collection.description = unicode(submit_form.description.data) - collection.creator = request.user.id + collection.title = six.text_type(submit_form.title.data) + collection.description = six.text_type(submit_form.description.data) + collection.actor = request.user.id + collection.type = request.db.Collection.USER_DEFINED_TYPE collection.generate_slug() # Make sure this user isn't duplicating an existing collection existing_collection = request.db.Collection.query.filter_by( - creator=request.user.id, + actor=request.user.id, + type=request.db.Collection.USER_DEFINED_TYPE, title=collection.title).first() if existing_collection: - add_message(request, messages.ERROR, - _('You already have a collection called "%s"!') \ - % collection.title) + messages.add_message( + request, + messages.ERROR, + _('You already have a collection called "%s"!') % + collection.title) else: collection.save() - add_message(request, SUCCESS, + messages.add_message( + request, + messages.SUCCESS, _('Collection "%s" added!') % collection.title) return redirect(request, "mediagoblin.user_pages.user_home", |