def scriptcontent(): resource_id = request.form['resource_id'] if resource_id == 'Demo': latest_version = ScriptData.get_latest_version('Demo') lines = [["Fade in:", 1], ["INT. ", 0]] if latest_version is not None: lines = json.loads(latest_version.data) return jsonify(title='Duck Soup', lines=lines, notes=[], sharedwith=[], contacts=[], autosave='true') user_email = get_current_user_email_with_default() permission = Screenplay.get_users_permission(resource_id, user_email) if permission not in ['owner', 'collab']: return 'not found' title = Screenplay.get_title(resource_id) latest_version = ScriptData.get_latest_version(resource_id) sharedwith = Screenplay.get_all_collaborators(resource_id) user = current_user.name unread_notes = UnreadNote.query. \ filter_by(resource_id=resource_id, user=user).all() unread_msg_ids = set([n.msg_id for n in unread_notes]) note_rows = Note.get_by_resource_id(resource_id) notes = [note.to_dict(unread_msg_ids) for note in note_rows] return jsonify(title=title, lines=json.loads(latest_version.data), lastSavedVersionNumber=latest_version.version, notes=notes, sharedwith=sharedwith, autosave='true')
def change_folder(): resource_ids = request.json.get('resource_id', None) folder_id = request.json.get('folder_id', None) if resource_ids is None or folder_id is None: return Response('0', mimetype='text/plain') user = current_user.email for resource_id in resource_ids.split(','): if Screenplay.get_users_permission(resource_id, user) != 'owner': continue Screenplay.set_folder(resource_id, folder_id) return Response('1', mimetype='text/plain')
def decorated_function(*args, **kwargs): from flask_models import Screenplay resource_id = get_resource_id_from_request() user = current_user.email permission = Screenplay.get_users_permission(resource_id, user) allowable_permissions = ['owner', 'ownerDeleted'] if allow_collab: allowable_permissions.append('collab') if permission is None or permission not in allowable_permissions \ or resource_id is None: return abort(403) return func(*args, **kwargs)
def titlepage_save(): user_email = get_current_user_email_with_default() resource_id = request.form['resource_id'] permission = Screenplay.get_users_permission(resource_id, user_email) if permission != 'owner': return redirect(url_for('scriptlist')) obj = TitlePageData.get_or_create(resource_id) fields = [ 'title', 'written_by', 'contact' ] for field in fields: if field in request.form: setattr(obj, field, request.form[field][:64*12]) db.session.commit() return Response('1', mimetype='text/plain')
def titlepage(): resource_id = request.args.get('resource_id') if not current_user.is_authenticated() and resource_id != 'Demo': return redirect(url_for('welcome')) user_email = get_current_user_email_with_default() permission = Screenplay.get_users_permission(resource_id, user_email) if permission != 'owner' and resource_id != 'Demo': return redirect(url_for('scriptlist')) fields = TitlePageData.get_fields_by_resource_id(resource_id) screenplay_title = Screenplay.get_title(resource_id) return render_template('titlepage.html', user=user_email, screenplay_title=screenplay_title, **fields)
def export_screenplay(): user = current_user.name resource_id = request.args.get('resource_id') export_format = request.args.get('export_format') title_page = request.args.get('title_page', '0') if resource_id == 'Demo': return permission = Screenplay.get_users_permission(resource_id, user) if permission not in ['owner', 'collab']: return include_title_page = title_page == '1' export_file = Screenplay.export_to_file(resource_id, export_format, include_title_page) _file, title, content_type = export_file response = make_response(_file.getvalue()) response.headers['Content-Type'] = content_type response.headers['Content-Disposition'] = \ 'attachment; filename="{}.{}"'.format(title, export_format) return response
def save_screenplay(): resource_id = request.form['resource_id'] if resource_id == 'Demo': return Response('demo', mimetype='text/plain') failed = Response('0', mimetype='text/plain') user_email = current_user.name permission = Screenplay.get_users_permission(resource_id, user_email) if permission != 'owner': return failed latest_version_number = Screenplay.get_latest_version_number(resource_id) new_version_number = latest_version_number + 1 expected_version_number = request.form.get('expected_version_number', None) if expected_version_number is not None: expected_version_number = int(expected_version_number) if Screenplay.version_exists(resource_id, expected_version_number): return failed if expected_version_number > (latest_version_number + 5): return failed new_version_number = expected_version_number data = request.form['data'] # set some limit on how much data can be saved if len(data) > 800 * 1000: return failed autosave = (int(request.form['autosave']) == 1) now = datetime.utcnow() new_save = ScriptData(resource_id=resource_id, data=data, version=new_version_number, timestamp=now, export='[[],[]]', tag='', autosave=autosave) db.session.add(new_save) Screenplay.set_last_updated(resource_id, now) db.session.commit() return jsonify(success=True, versionSaved=new_version_number)
def editor(): resource_id = request.args.get('resource_id') if not current_user.is_authenticated() and resource_id != 'Demo': return redirect(url_for('welcome')) user_email = get_current_user_email_with_default() permission = Screenplay.get_users_permission(resource_id, user_email) if permission is None and resource_id != 'Demo': return redirect(url_for('scriptlist')) notification = ShareNotify.query. \ filter_by(resource_id=resource_id, user=user_email).first() if notification: notification.opened = True notification.timeopened = datetime.utcnow() db.session.commit() EOV = 'editor' if permission == 'owner' else 'viewer' sign_out = '/user/sign-out' return render_template('editor.html', user=user_email, mode="PRO", resource_id=resource_id, EOV=EOV, sign_out=sign_out)