def get(self, item_id): item = Item.objects.get_or_404(item_id=item_id) # only admins or the item submitter can edit the item if item.submitter.id != current_user.id: if not current_user.is_admin: abort(403) form = None if item.github: form = EditGithubItemForm() else: form = EditItemForm() form.description.default = item.description licenses = License.objects.all() form.set_licenses(licenses) form.license.default = str(item.license.license_id) categories = Category.objects.all() form.set_categories(categories, g.lang) form.category.default = str(item.category.category_id) form.process() return render_template('items/edit_item.html', form=form, item=item)
def post(self, item_id): item = Item.objects.get_or_404(item_id=item_id) # only admins or the item submitter can edit the item if item.submitter.id != current_user.id: if not current_user.is_admin: abort(403) form = None if item.github: form = EditGithubItemForm() else: form = EditItemForm() licenses = License.objects.all() form.set_licenses(licenses) categories = Category.objects.all() form.set_categories(categories, g.lang) if form.validate_on_submit(): for title in item.titles: # ugly, I'll make it shorter, later... if title.lang == 'ar': title.title = form.ar_title.data.strip() elif title.lang == 'en': title.title = form.en_title.data.strip() else: title.title = form.fr_title.data.strip() item.tags = form.tags.data.strip().split(',') item.category = Category.objects.get(category_id= int(form.category.data)) if form.thumbnail.data: # if the user has uploaded new thumbnail # remove the old one item.thumbnail.delete() # replace it with the new one thumbnail = request.files['thumbnail'] thumbnail_name = secure_filename(thumbnail.filename) if thumbnail and allowed_thumbnails(thumbnail_name): ext = thumbnail.mimetype.split('/')[-1] # use the 'thumbnail' name for all thumbnails filename = '.'.join(["thumbnail", ext]) item.thumbnail.put(thumbnail.stream, content_type=thumbnail.mimetype, filename=filename) if form.blog_post.data.strip(): item.blog_post = form.blog_post.data if not item.github: item.description = form.description.data item.license = License.objects.get(license_id= int(form.license.data)) else: item.github = form.github.data item.save() # no need to process any uploaded files flash('Item updated successfully', category='success') return render_template('items/edit_item.html', form=form, item=item) else: flash("Couldn't update item", category='error') return render_template('items/edit_item.html', form=form, item=item) # now, replace them with the new ones uploaded_files = request.files.getlist("files") new_files = [] for file in uploaded_files: # Make the filename safe, remove unsupported chars filename = secure_filename(file.filename) # Check if the file is one of the allowed types/extensions if file and allowed_file(filename): # put the file in the ListField. # see https://gist.github.com/tfausak/1299339 file_ = GridFSProxy() file_.put(file.stream, content_type=file.mimetype, filename=filename) new_files.append(file_) if len(new_files) > 0: # delete old files first for file in item.files: file.delete() # push the new one item.files = new_files # Save the thing item.save() flash('Item updated successfully', category='success') return render_template('items/edit_item.html', form=form, item=item)