aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/submit/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'mediagoblin/submit/views.py')
-rw-r--r--mediagoblin/submit/views.py78
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",