1 # GNU MediaGoblin -- federated, autonomous media hosting
2 # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
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.
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.
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/>.
19 from mediagoblin
import messages
20 import mediagoblin
.mg_globals
as mg_globals
24 _log
= logging
.getLogger(__name__
)
26 from mediagoblin
.db
.models
import Collection
27 from mediagoblin
.tools
.federation
import create_activity
28 from mediagoblin
.tools
.translate
import pass_to_ugettext
as _
29 from mediagoblin
.tools
.response
import render_to_response
, redirect
30 from mediagoblin
.decorators
import require_active_login
, user_has_privilege
31 from mediagoblin
.submit
import forms
as submit_forms
32 from mediagoblin
.media_types
import FileTypeNotSupported
33 from mediagoblin
.submit
.lib
import \
34 check_file_field
, submit_media
, get_upload_file_limits
, \
35 FileUploadLimit
, UserUploadLimit
, UserPastUploadLimit
36 from mediagoblin
.user_pages
.lib
import add_media_to_collection
40 @user_has_privilege(u
'uploader')
41 def submit_start(request
):
43 First view for submitting a file.
45 upload_limit
, max_file_size
= get_upload_file_limits(request
.user
)
47 submit_form
= submit_forms
.get_submit_start_form(
49 license
=request
.user
.license_preference
,
50 max_file_size
=max_file_size
,
51 upload_limit
=upload_limit
,
52 uploaded
=request
.user
.uploaded
)
53 users_collections
= Collection
.query
.filter_by(
54 actor
=request
.user
.id,
55 type=Collection
.USER_DEFINED_TYPE
56 ).order_by(Collection
.title
)
58 # Only show the Collections dropdown if the user has some
60 if users_collections
.count() > 0:
61 submit_form
.collection
.query
= users_collections
63 del submit_form
.collection
65 if request
.method
== 'POST' and submit_form
.validate():
66 if not check_file_field(request
, 'file'):
67 submit_form
.file.errors
.append(
68 _(u
'You must provide a file.'))
72 mg_app
=request
.app
, user
=request
.user
,
73 submitted_file
=request
.files
['file'],
74 filename
=request
.files
['file'].filename
,
75 title
=six
.text_type(submit_form
.title
.data
),
76 description
=six
.text_type(submit_form
.description
.data
),
77 license
=six
.text_type(submit_form
.license
.data
) or None,
78 tags_string
=submit_form
.tags
.data
,
79 urlgen
=request
.urlgen
)
81 if submit_form
.collection
and submit_form
.collection
.data
:
82 add_media_to_collection(
83 submit_form
.collection
.data
, media
)
85 "add", media
, request
.user
,
86 target
=submit_form
.collection
.data
)
91 _('Woohoo! Submitted!'))
93 return redirect(request
, "mediagoblin.user_pages.user_home",
94 user
=request
.user
.username
)
97 # Handle upload limit issues
98 except FileUploadLimit
:
99 submit_form
.file.errors
.append(
100 _(u
'Sorry, the file size is too big.'))
101 except UserUploadLimit
:
102 submit_form
.file.errors
.append(
103 _('Sorry, uploading this file will put you over your'
105 except UserPastUploadLimit
:
106 messages
.add_message(
109 _('Sorry, you have reached your upload limit.'))
110 return redirect(request
, "mediagoblin.user_pages.user_home",
111 user
=request
.user
.username
)
112 except FileTypeNotSupported
as e
:
113 submit_form
.file.errors
.append(e
)
114 except Exception as e
:
117 return render_to_response(
119 'mediagoblin/submit/start.html',
120 {'submit_form': submit_form
,
121 'app_config': mg_globals
.app_config
})
124 @require_active_login
125 def add_collection(request
, media
=None):
127 View to create a new collection
129 submit_form
= submit_forms
.AddCollectionForm(request
.form
)
131 if request
.method
== 'POST' and submit_form
.validate():
132 collection
= request
.db
.Collection()
134 collection
.title
= six
.text_type(submit_form
.title
.data
)
135 collection
.description
= six
.text_type(submit_form
.description
.data
)
136 collection
.actor
= request
.user
.id
137 collection
.type = request
.db
.Collection
.USER_DEFINED_TYPE
138 collection
.generate_slug()
140 # Make sure this user isn't duplicating an existing collection
141 existing_collection
= request
.db
.Collection
.query
.filter_by(
142 actor
=request
.user
.id,
143 type=request
.db
.Collection
.USER_DEFINED_TYPE
,
144 title
=collection
.title
).first()
146 if existing_collection
:
147 messages
.add_message(
150 _('You already have a collection called "%s"!') %
155 messages
.add_message(
158 _('Collection "%s" added!') % collection
.title
)
160 return redirect(request
, "mediagoblin.user_pages.user_home",
161 user
=request
.user
.username
)
163 return render_to_response(
165 'mediagoblin/submit/collection.html',
166 {'submit_form': submit_form
,
167 'app_config': mg_globals
.app_config
})