def uploaded_file(extension='.png', file_content=None): filename = str(time.time()) + extension file_path = current_app.config.get('BASE_DIR') + '/static/temp/' + filename file = open(file_path, "wb") file.write(file_content.split(",")[1].decode('base64')) file.close() return UploadedFile(file_path, filename)
def save_resized_image(image_file, basewidth, aspect, height_size, upload_path, ext='jpg', remove_after_upload=False): """ Save the resized version of the background image :param upload_path: :param ext: :param remove_after_upload: :param height_size: :param aspect: :param basewidth: :param image_file: :return: """ filename = '{filename}.{ext}'.format(filename=time.time(), ext=ext) img = Image.open(image_file) if aspect == 'on': width_percent = (basewidth / float(img.size[0])) height_size = int((float(img.size[1]) * float(width_percent))) img = img.resize((basewidth, height_size), PIL.Image.ANTIALIAS) img.save(image_file) file = UploadedFile(file_path=image_file, filename=filename) if remove_after_upload: os.remove(image_file) return upload(file, upload_path)
def uploaded_file(extention='.png', file_content=None): filename = str(time.time()) + extention file_path = os.path.realpath('.') + '/static/temp/' + filename file = open(file_path, "wb") file.write(file_content.split(",")[1].decode('base64')) file.close() return UploadedFile(file_path, filename)
def uploaded_file_provided_by_url(url): response_file = urlopen(url) filename = get_image_file_name() + '.jpg' file_path = os.path.realpath('.') + '/static/uploads/' + filename fh = open(file_path, "wb") fh.write(response_file.read()) fh.close() return filename, UploadedFile(file_path, filename)
def save_file_provided_by_url(url): response_file = urlopen(url) filename = str(time.time()) + '.jpg' file_path = os.path.realpath('.') + '/static/temp/' + filename fh = open(file_path, "wb") fh.write(response_file.read()) fh.close() img = UploadedFile(file_path, filename) background_url = upload(img, '/image/' + filename) return background_url
def placeholder_upload(): if request.method == 'POST': placeholder_image = request.form['placeholder'] filename = request.form['file_name'] if placeholder_image: placeholder_file = uploaded_file(file_content=placeholder_image) placeholder = upload(placeholder_file, 'placeholders/original/' + filename) try: os.mkdir(app.config['TEMP_UPLOADS_FOLDER']) except OSError as exc: if exc.errno != errno.EEXIST: raise exc pass placeholder_local = upload_local( placeholder_file, app.config['TEMP_UPLOADS_FOLDER'] + filename) temp_img_file = placeholder_local.replace('/serve_', '') basewidth = 300 img = Image.open(temp_img_file) wpercent = (basewidth / float(img.size[0])) hsize = int((float(img.size[1]) * float(wpercent))) img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS) img.save(app.config['TEMP_UPLOADS_FOLDER'] + '/temp.png') file_name = temp_img_file.rsplit('/', 1)[1] thumbnail_file = UploadedFile(file_path=temp_img_file, filename=file_name) background_thumbnail_url = upload_local( thumbnail_file, 'placeholders/thumbnail/' + filename) shutil.rmtree(path=app.config['TEMP_UPLOADS_FOLDER']) placeholder_db = DataGetter.get_custom_placeholder_by_name( request.form['name']) if placeholder_db: placeholder_db.url = placeholder placeholder_db.thumbnail = background_thumbnail_url else: placeholder_db = CustomPlaceholder( name=request.form['name'], url=placeholder, thumbnail=background_thumbnail_url) save_to_db(placeholder_db, 'Custom Placeholder saved') return jsonify({ 'status': 'ok', 'placeholder': placeholder, 'id': placeholder_db.id }) else: return jsonify({'status': 'no logo'})
def export_xcal_task(event_id): event = DataGetter.get_event(event_id) try: os.mkdir(app.config['TEMP_UPLOADS_FOLDER']) except OSError as exc: if exc.errno != errno.EEXIST: raise exc filename = "xcal.xcs" file_path = app.config['TEMP_UPLOADS_FOLDER'] + "/" + filename with open(file_path, "w") as temp_file: temp_file.write(XCalExporter.export(event_id)) xcal_file = UploadedFile(file_path=file_path, filename=filename) event.xcal_url = upload( xcal_file, UPLOAD_PATHS['exports']['xcal'].format(event_id=event_id)) save_to_db(event)
def export_speaker_csv_task(event_id): try: os.mkdir(app.config['TEMP_UPLOADS_FOLDER']) except OSError as exc: if exc.errno != errno.EEXIST: raise exc filename = "speaker-{}.csv".format(uuid.uuid1().hex) file_path = app.config['TEMP_UPLOADS_FOLDER'] + "/" + filename with open(file_path, "w") as temp_file: temp_file.write(SpeakerCsv.export(event_id)) speaker_csv_file = UploadedFile(file_path=file_path, filename=filename) speaker_csv_url = upload( speaker_csv_file, UPLOAD_PATHS['exports']['csv'].format(event_id=event_id)) return speaker_csv_url
def export_event_json(event_id, settings): """ Exports the event as a zip on the server and return its path """ # make directory exports_dir = app.config['BASE_DIR'] + '/static/uploads/exports/' if not os.path.isdir(exports_dir): os.mkdir(exports_dir) dir_path = exports_dir + 'event%d' % event_id if os.path.isdir(dir_path): shutil.rmtree(dir_path, ignore_errors=True) os.mkdir(dir_path) # save to directory for e in EXPORTS: if e[0] == 'event': data = _order_json(marshal(e[1].get(event_id), e[2]), e) _download_media(data, 'event', dir_path, settings) else: data = marshal(e[1].list(event_id), e[2]) for count in range(len(data)): data[count] = _order_json(data[count], e) _download_media(data[count], e[0], dir_path, settings) data_str = json.dumps(data, indent=4, ensure_ascii=False).encode('utf-8') fp = open(dir_path + '/' + e[0], 'w') fp.write(data_str) fp.close() # add meta data_str = json.dumps(_generate_meta(), sort_keys=True, indent=4, ensure_ascii=False).encode('utf-8') fp = open(dir_path + '/meta', 'w') fp.write(data_str) fp.close() # make zip shutil.make_archive(dir_path, 'zip', dir_path) dir_path = dir_path + ".zip" storage_path = UPLOAD_PATHS['exports']['zip'].format(event_id=event_id) uploaded_file = UploadedFile(dir_path, dir_path.rsplit('/', 1)[1]) storage_url = upload(uploaded_file, storage_path) if get_settings()['storage_place'] != "s3" and get_settings( )['storage_place'] != 'gs': storage_url = app.config['BASE_DIR'] + storage_url.replace( "/serve_", "/") return storage_url
def export_order_csv_task(event_id): try: os.mkdir(app.config['TEMP_UPLOADS_FOLDER']) except OSError as exc: if exc.errno != errno.EEXIST: raise exc filename = "order-{}.csv".format(uuid.uuid1().hex) file_path = app.config['TEMP_UPLOADS_FOLDER'] + "/" + filename with open(file_path, "w") as temp_file: writer = csv.writer(temp_file) content = OrderCsv.export(event_id) for row in content: writer.writerow(row) order_csv_file = UploadedFile(file_path=file_path, filename=filename) order_csv_url = upload( order_csv_file, UPLOAD_PATHS['exports']['csv'].format(event_id=event_id)) return order_csv_url
def save_resized_image(image_file, basewidth, aspect, height_size, upload_path, ext='jpg', remove_after_upload=False): """ Save the resized version of the background image :param upload_path: :param ext: :param remove_after_upload: :param height_size: :param aspect: :param basewidth: :param image_file: :return: """ filename = '{filename}.{ext}'.format(filename=get_image_file_name(), ext=ext) img = Image.open(image_file) if aspect == 'on': width_percent = (basewidth / float(img.size[0])) height_size = int((float(img.size[1]) * float(width_percent))) img = img.resize((basewidth, height_size), PIL.Image.ANTIALIAS) temp_file_relative_path = 'static/media/temp/' + generate_hash( str(image_file)) + get_image_file_name() + '.jpg' temp_file_path = app.config['BASE_DIR'] + '/' + temp_file_relative_path img.save(temp_file_path) file = UploadedFile(file_path=temp_file_path, filename=filename) if remove_after_upload: os.remove(image_file) uploaded_url = upload(file, upload_path) os.remove(temp_file_path) return uploaded_url
def placeholder_upload(self): if request.method == 'POST': placeholder_image = request.form['placeholder'] filename = request.form['file_name'] if placeholder_image: placeholder_file = uploaded_file( file_content=placeholder_image) placeholder = upload(placeholder_file, 'placeholders/original/' + filename) temp_img_file = placeholder.replace('/serve_', '') basewidth = 300 img = Image.open(temp_img_file) wpercent = (basewidth / float(img.size[0])) hsize = int((float(img.size[1]) * float(wpercent))) img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS) os.mkdir('static/media/temp/') img.save('static/media/temp/temp.png') file_name = temp_img_file.rsplit('/', 1)[1] thumbnail_file = UploadedFile(file_path=temp_img_file, filename=file_name) background_thumbnail_url = upload( thumbnail_file, 'placeholders/thumbnail/' + filename) shutil.rmtree(path='static/media/temp/') placeholder_db = DataGetter.get_custom_placeholder_by_name( request.form['name']) if placeholder_db: placeholder_db.url = placeholder placeholder_db.thumbnail = background_thumbnail_url else: placeholder_db = CustomPlaceholder( name=request.form['name'], url=placeholder, thumbnail=background_thumbnail_url) save_to_db(placeholder_db, 'Custom Placeholder saved') return jsonify({ 'status': 'ok', 'placeholder': placeholder, 'id': placeholder_db.id }) else: return jsonify({'status': 'no logo'})
def export_session_csv_task(event_id): try: os.mkdir(app.config['TEMP_UPLOADS_FOLDER']) except OSError as exc: if exc.errno != errno.EEXIST: raise exc filename = "session-{}.csv".format(uuid.uuid1().hex) file_path = app.config['TEMP_UPLOADS_FOLDER'] + "/" + filename with open(file_path, "w") as temp_file: writer = csv.writer(temp_file) content = SessionCsv.export(event_id) for row in content: row = [s.encode('utf-8') for s in row] writer.writerow(row) session_csv_file = UploadedFile(file_path=file_path, filename=filename) session_csv_url = upload( session_csv_file, UPLOAD_PATHS['exports']['csv'].format(event_id=event_id)) return session_csv_url
def save_event_image(image_url, upload_path, ext='png', remove_after_upload=True): """ Save the image :param ext: :param remove_after_upload: :param upload_path: :param image_url: :return: """ filename = '{filename}.{ext}'.format(filename=time.time(), ext=ext) file_path = get_path_of_temp_url(image_url) logo_file = UploadedFile(file_path, filename) url = upload(logo_file, upload_path) if remove_after_upload: os.remove(file_path) return url if url else ''
def _upload_media(task_handle, event_id, base_path): """ Actually uploads the resources """ global UPLOAD_QUEUE total = len(UPLOAD_QUEUE) ct = 0 for i in UPLOAD_QUEUE: # update progress ct += 1 update_state(task_handle, 'Uploading media (%d/%d)' % (ct, total)) # get upload infos name, dao = i['srv'] id_ = i['id'] if name == 'event': item = dao.get(event_id) else: item = dao.get(event_id, id_) # get cur file field = i['field'] path = getattr(item, field) if path.startswith('/'): # relative files path = base_path + path if os.path.isfile(path): filename = path.rsplit('/', 1)[1] file = UploadedFile(path, filename) else: file = '' # remove current file setting else: # absolute links try: filename = UPLOAD_PATHS[name][field].rsplit('/', 1)[1] if is_downloadable(path): r = requests.get(path, allow_redirects=True) file = UploadedMemory(r.content, filename) else: file = None except: file = None # don't update current file setting if file is None: continue # upload try: if file == '': raise Exception() key = UPLOAD_PATHS[name][field] if name == 'event': key = key.format(event_id=event_id) else: key = key.format(event_id=event_id, id=id_) print key new_url = upload(file, key) except Exception: print traceback.format_exc() new_url = None setattr(item, field, new_url) save_to_db(item, msg='Url updated') # clear queue UPLOAD_QUEUE = [] return
def edit_view(event_id, speaker_id): speaker = get_speaker_or_throw(speaker_id) event = DataGetter.get_event(event_id) form_elems = DataGetter.get_custom_form_elements(event_id) if not form_elems: flash( "Speaker form has been incorrectly configured for this event. Editing has been disabled", "danger") return redirect(url_for('.index_view', event_id=event_id)) speaker_form = json.loads(form_elems.speaker_form) if request.method == 'GET': return render_template('gentelella/admin/event/speakers/edit.html', speaker=speaker, event_id=event_id, event=event, speaker_form=speaker_form) if request.method == 'POST': # set photo if 'photo' in request.files and request.files['photo'].filename != '': speaker_img_file = request.files['photo'] speaker_img = upload( speaker_img_file, UPLOAD_PATHS['speakers']['photo'].format( event_id=int(event_id), id=int(speaker.id))) speaker.photo = speaker_img logo = request.form.get('photo', None) print logo if logo != '' and logo: filename = '{}.png'.format(time.time()) filepath = '{}/static/{}'.format(path.realpath('.'), logo[len('/serve_static/'):]) logo_file = UploadedFile(filepath, filename) print logo_file logo = upload( logo_file, 'events/%d/speakers/%d/photo' % (int(event_id), int(speaker.id))) speaker.photo = logo image_sizes = DataGetter.get_image_sizes_by_type(type='profile') if not image_sizes: image_sizes = ImageSizes(full_width=150, full_height=150, icon_width=35, icon_height=35, thumbnail_width=50, thumbnail_height=50, type='profile') save_to_db(image_sizes, "Image Sizes Saved") filename = '{}.jpg'.format(time.time()) filepath = '{}/static/{}'.format(path.realpath('.'), logo[len('/serve_static/'):]) logo_file = UploadedFile(filepath, filename) temp_img_file = upload_local( logo_file, 'events/{event_id}/speakers/{id}/temp'.format( event_id=int(event_id), id=int(speaker.id))) temp_img_file = temp_img_file.replace('/serve_', '') basewidth = image_sizes.full_width img = Image.open(temp_img_file) hsize = image_sizes.full_height img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS) img.save(temp_img_file) file_name = temp_img_file.rsplit('/', 1)[1] large_file = UploadedFile(file_path=temp_img_file, filename=file_name) profile_thumbnail_url = upload( large_file, UPLOAD_PATHS['speakers']['thumbnail'].format( event_id=int(event_id), id=int(speaker.id))) basewidth = image_sizes.thumbnail_width img = Image.open(temp_img_file) hsize = image_sizes.thumbnail_height img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS) img.save(temp_img_file) file_name = temp_img_file.rsplit('/', 1)[1] thumbnail_file = UploadedFile(file_path=temp_img_file, filename=file_name) profile_small_url = upload( thumbnail_file, UPLOAD_PATHS['speakers']['small'].format( event_id=int(event_id), id=int(speaker.id))) basewidth = image_sizes.icon_width img = Image.open(temp_img_file) hsize = image_sizes.icon_height img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS) img.save(temp_img_file) file_name = temp_img_file.rsplit('/', 1)[1] icon_file = UploadedFile(file_path=temp_img_file, filename=file_name) profile_icon_url = upload( icon_file, UPLOAD_PATHS['speakers']['icon'].format(event_id=int(event_id), id=int(speaker.id))) shutil.rmtree(path='static/media/' + 'events/{event_id}/speakers/{id}/temp'.format( event_id=int(event_id), id=int(speaker.id))) speaker.thumbnail = profile_thumbnail_url speaker.small = profile_small_url speaker.icon = profile_icon_url save_to_db(speaker, "Speaker photo saved") # set other fields speaker.name = request.form.get('name', None) speaker.short_biography = request.form.get('short_biography', None) speaker.long_biography = request.form.get('long_biography', None) speaker.email = request.form.get('email', None) speaker.mobile = request.form.get('mobile', None) speaker.website = request.form.get('website', None) speaker.twitter = request.form.get('twitter', None) speaker.facebook = request.form.get('facebook', None) speaker.github = request.form.get('github', None) speaker.linkedin = request.form.get('linkedin', None) speaker.organisation = request.form.get('organisation', None) speaker.featured = True if request.form.get( 'featured', 'false') == 'true' else False speaker.position = request.form.get('position', None) speaker.country = request.form.get('country', None) speaker.city = request.form.get('city', None) if request.form.get('heard_from', None) == "Other": speaker.heard_from = request.form.get('other_text', None) else: speaker.heard_from = request.form.get('heard_from', None) speaker.sponsorship_required = request.form.get( 'sponsorship_required', None) speaker.speaking_experience = request.form.get('speaking_experience', None) save_to_db(speaker, "Speaker has been updated") flash("Speaker has been saved", "success") return redirect(url_for('.index_view', event_id=event_id))
def update_user(form, user_id, contacts_only_update=False): user = User.query.filter_by(id=user_id).first() user_detail = UserDetail.query.filter_by(user_id=user_id).first() if user.email != form['email']: record_activity('update_user_email', user_id=user.id, old=user.email, new=form['email']) if user.email != form['email']: user.is_verified = False serializer = Helper.get_serializer() data = [form['email']] form_hash = serializer.dumps(data) link = url_for('admin.create_account_after_confirmation_view', hash=form_hash, _external=True) Helper.send_email_when_changes_email(user.email, form['email']) Helper.send_notif_when_changes_email(user, user.email, form['email']) Helper.send_email_confirmation(form, link) user.email = form['email'] user_detail.contact = form['contact'] if not contacts_only_update: user_detail.firstname = form['firstname'] user_detail.lastname = form['lastname'] if form.get('facebook', '').strip() != '': user_detail.facebook = 'https://facebook.com/' + form['facebook'].strip() else: user_detail.facebook = '' if form.get('twitter', '').strip() != '': user_detail.twitter = 'https://twitter.com/' + form['twitter'].strip() else: user_detail.twitter = '' if form.get('instagram', '').strip() != '': user_detail.instagram = 'https://instagram.com/' + form['instagram'].strip() else: user_detail.instagram = '' if form.get('google', '').strip() != '': user_detail.google = 'https://plus.google.com/' + form['google'].strip() else: user_detail.google = '' user_detail.details = form['details'] avatar_img = form.get('avatar-img', None) if string_not_empty(avatar_img) and avatar_img: user_detail.avatar_uploaded = "" user_detail.thumbnail = "" user_detail.small = "" user_detail.icon = "" filename = '{}.png'.format(get_image_file_name()) filepath = '{}/static/{}'.format(path.realpath('.'), avatar_img[len('/serve_static/'):]) # print "File path 1", filepath avatar_img_file = UploadedFile(filepath, filename) avatar_img_temp = upload(avatar_img_file, 'users/%d/avatar' % int(user_id)) user_detail.avatar_uploaded = avatar_img_temp image_sizes = DataGetter.get_image_sizes_by_type(type='profile') if not image_sizes: image_sizes = ImageSizes(full_width=150, full_height=150, icon_width=35, icon_height=35, thumbnail_width=50, thumbnail_height=50, type='profile') save_to_db(image_sizes, "Image Sizes Saved") filename = '{}.jpg'.format(get_image_file_name()) filepath = '{}/static/{}'.format(path.realpath('.'), avatar_img[len('/serve_static/'):]) # print "File path 1", filepath avatar_img_file = UploadedFile(filepath, filename) temp_img_file = upload_local(avatar_img_file, 'users/{user_id}/temp'.format(user_id=int(user_id))) temp_img_file = temp_img_file.replace('/serve_', '') basewidth = image_sizes.full_width img = Image.open(temp_img_file) hsize = image_sizes.full_height img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS) img.save(temp_img_file) file_name = temp_img_file.rsplit('/', 1)[1] large_file = UploadedFile(file_path=temp_img_file, filename=file_name) profile_thumbnail_url = upload( large_file, UPLOAD_PATHS['user']['thumbnail'].format( user_id=int(user_id) )) basewidth = image_sizes.thumbnail_width img = Image.open(temp_img_file) hsize = image_sizes.thumbnail_height img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS) img.save(temp_img_file) file_name = temp_img_file.rsplit('/', 1)[1] thumbnail_file = UploadedFile(file_path=temp_img_file, filename=file_name) profile_small_url = upload( thumbnail_file, UPLOAD_PATHS['user']['small'].format( user_id=int(user_id) )) basewidth = image_sizes.icon_width img = Image.open(temp_img_file) hsize = image_sizes.icon_height img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS) img.save(temp_img_file) file_name = temp_img_file.rsplit('/', 1)[1] icon_file = UploadedFile(file_path=temp_img_file, filename=file_name) profile_icon_url = upload( icon_file, UPLOAD_PATHS['user']['icon'].format( user_id=int(user_id) )) shutil.rmtree(path='static/media/' + 'users/{user_id}/temp'.format(user_id=int(user_id))) user_detail.thumbnail = profile_thumbnail_url user_detail.small = profile_small_url user_detail.icon = profile_icon_url user, user_detail, save_to_db(user, "User updated") record_activity('update_user', user=user)
def edit_session(request, session, speaker=None): with db.session.no_autoflush: form = request.form event_id = session.event_id slide_temp_url = form.get('slides_url') video_temp_url = form.get('video_url') audio_temp_url = form.get('audio_url') slide_file = '' video_file = '' audio_file = '' if slide_temp_url and slide_temp_url != session.slides: slide_file = UploadedFile(get_path_of_temp_url(slide_temp_url), slide_temp_url.rsplit('/', 1)[1]) if video_temp_url and video_temp_url != session.video: video_file = UploadedFile(get_path_of_temp_url(video_temp_url), video_temp_url.rsplit('/', 1)[1]) if audio_temp_url and audio_temp_url != session.audio: audio_file = UploadedFile(get_path_of_temp_url(audio_temp_url), audio_temp_url.rsplit('/', 1)[1]) form_state = form.get('state', 'draft') if slide_temp_url != "" and slide_temp_url != session.slides and slide_file: slide_temp_url = upload(slide_file, UPLOAD_PATHS['sessions']['slides'].format( event_id=int(event_id), id=int(session.id) )) if audio_temp_url != "" and audio_temp_url != session.audio and audio_file: audio_temp_url = upload( audio_file, UPLOAD_PATHS['sessions']['audio'].format( event_id=int(event_id), id=int(session.id) )) if video_temp_url != "" and video_temp_url != session.video and video_file: video_temp_url = upload( video_file, UPLOAD_PATHS['sessions']['video'].format( event_id=int(event_id), id=int(session.id) )) session.slides = slide_temp_url session.audio = audio_temp_url session.video = video_temp_url if form_state == 'pending' and session.state != 'pending' and \ session.state != 'accepted' and session.state != 'rejected' and session.state != 'confirmed': session.state = 'pending' trigger_new_session_notifications(session.id, event_id=event_id) session.title = form.get('title', '') session.subtitle = form.get('subtitle', '') session.long_abstract = form.get('long_abstract', '') session.short_abstract = form.get('short_abstract', '') session.level = form.get('level', '') session.track_id = form.get('track', None) if form.get('track', None) != "" else None session.session_type_id = form.get('session_type', None) if form.get('session_type', None) != "" else None existing_speaker_ids = form.getlist("speakers[]") current_speaker_ids = [] existing_speaker_ids_by_email = [] save_to_db(session, 'Session Updated') if speaker: save_speaker(request, event_id=event_id, speaker=speaker) for existing_speaker in DataGetter.get_speaker_by_email(form.get("email")).all(): existing_speaker_ids_by_email.append(str(existing_speaker.id)) for current_speaker in session.speakers: current_speaker_ids.append(str(current_speaker.id)) for current_speaker_id in current_speaker_ids: if current_speaker_id \ not in existing_speaker_ids and current_speaker_id not in existing_speaker_ids_by_email: current_speaker = DataGetter.get_speaker(current_speaker_id) session.speakers.remove(current_speaker) db.session.commit() for existing_speaker_id in existing_speaker_ids: existing_speaker = DataGetter.get_speaker(existing_speaker_id) if existing_speaker not in session.speakers: session.speakers.append(existing_speaker) db.session.commit() record_activity('update_session', session=session, event_id=event_id) update_version(event_id, False, "sessions_ver")
def add_session_to_event(request, event_id, state=None, use_current_user=True, no_name=False): """ Session will be saved to database with proper Event id :param use_current_user: :param state: :param request: The request :param event_id: Session belongs to Event by event id """ form = request.form slide_temp_url = form.get('slides_url') video_temp_url = form.get('video_url') audio_temp_url = form.get('audio_url') slide_file = '' video_file = '' audio_file = '' if slide_temp_url: slide_file = UploadedFile(get_path_of_temp_url(slide_temp_url), slide_temp_url.rsplit('/', 1)[1]) if video_temp_url: video_file = UploadedFile(get_path_of_temp_url(video_temp_url), video_temp_url.rsplit('/', 1)[1]) if audio_temp_url: audio_file = UploadedFile(get_path_of_temp_url(audio_temp_url), audio_temp_url.rsplit('/', 1)[1]) if not state: state = form.get('state', 'draft') event = DataGetter.get_event(event_id) new_session = Session(title=form.get('title', ''), subtitle=form.get('subtitle', ''), long_abstract=form.get('long_abstract', ''), start_time=event.start_time, end_time=event.start_time + timedelta(hours=1), event_id=event_id, short_abstract=form.get('short_abstract', ''), level=form.get('level', ''), comments=form.get('comments', ''), language=form.get('language', ''), state=state) if form.get('track', None) != "": new_session.track_id = form.get('track', None) if form.get('session_type', None) != "": new_session.session_type_id = form.get('session_type', None) if form.get('email', '') != '': speaker = Speaker.query.filter_by(email=form.get('email', '')).filter_by(event_id=event_id).first() speaker = save_speaker( request, event_id=event_id, speaker=speaker, user=login.current_user if use_current_user else None, no_name=no_name ) new_session.speakers.append(speaker) save_to_db(new_session, "Session saved") if state == 'pending': trigger_new_session_notifications(new_session.id, event=event) if slide_temp_url != "" and slide_file: slide_url = upload( slide_file, UPLOAD_PATHS['sessions']['slides'].format( event_id=int(event_id), id=int(new_session.id) )) new_session.slides = slide_url if audio_temp_url != "" and audio_file: audio_url = upload( audio_file, UPLOAD_PATHS['sessions']['audio'].format( event_id=int(event_id), id=int(new_session.id) )) new_session.audio = audio_url if video_temp_url != "" and video_file: video_url = upload( video_file, UPLOAD_PATHS['sessions']['video'].format( event_id=int(event_id), id=int(new_session.id) )) new_session.video = video_url record_activity('create_session', session=new_session, event_id=event_id) update_version(event_id, False, 'sessions_ver') invite_emails = form.getlist("speakers[email]") for index, email in enumerate(invite_emails): if not string_empty(email): new_invite = Invite(event_id=event_id, session_id=new_session.id) hash = random.getrandbits(128) new_invite.hash = "%032x" % hash save_to_db(new_invite, "Invite saved") link = url_for('event_sessions.invited_view', session_id=new_session.id, event_id=event_id, _external=True) Helper.send_email_invitation(email, new_session.title, link) # If a user is registered by the email, send a notification as well user = DataGetter.get_user_by_email(email, no_flash=True) if user: cfs_link = url_for('event_detail.display_event_cfs', identifier=event.identifier) Helper.send_notif_invite_papers(user, event.name, cfs_link, link)