def share_screenplay(): resource_id = request.form['resource_id'] collaborators = request.form['collaborators'].split(',') new_collaborators = Screenplay.add_access(resource_id, collaborators) if new_collaborators and request.form.get('sendEmail', '') == 'y': user = current_user.email subject = 'Rawscripts.com: ' + user + " has shared a screenplay with you." title = Screenplay.get_title(resource_id) # build email body and html script_url = url_for('editor', _external=True, resource_id=resource_id) body = script_url + "\n\n\n " body += "--- This screenplay written and sent from RawScripts.com." divArea = '' if request.form.get('addMsg', '') == 'y': divArea = "<div style='width:300px; margin-left:20px; font-size:12pt; font-family:serif'>" divArea += request.form.get('msg', '') divArea += "<br><b>--" + user + "</b></div>" replacements = { 'SCRIPTTITLE': title, 'USER': user, 'SCRIPTURL': script_url, 'TEXTAREA': divArea} with app.open_resource('static/text/notify.txt') as f: html = f.read() for key, val in replacements.items(): html = html.replace(key, val) msg = Message(subject, recipients=new_collaborators, body=body, html=html) mail.send(msg) # TODO: send the danged email output = ",".join(new_collaborators) return Response(output, mimetype='text/plain')
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 rename_screenplay(): resource_id = get_resource_id_from_request() rename = request.form.get('rename', None) if rename is None: rename = request.json.get('rename', None) Screenplay.rename(resource_id, rename) return Response('done', mimetype='text/plain')
def share_screenplay(): resource_id = get_resource_id_from_request() collaborators_raw = request.form.get('collaborators', None) if collaborators_raw is None: collaborators_raw = request.json.get('collaborators', None) collaborators = collaborators_raw.split(',') new_collaborators = Screenplay.add_access(resource_id, collaborators) if new_collaborators and request.json.get('sendEmail', '') == 'y': user = current_user.email subject = 'Rawscripts.com: ' + user + " has shared a screenplay with you." title = Screenplay.get_title(resource_id) # build email body and html script_url = url_for('editor', _external=True, resource_id=resource_id) body = script_url + "\n\n\n " body += "--- This screenplay written and sent from RawScripts.com." divArea = '' replacements = { 'SCRIPTTITLE': title, 'USER': user, 'SCRIPTURL': script_url, 'TEXTAREA': divArea} with app.open_resource('static/text/notify.txt') as f: html = f.read() for key, val in replacements.items(): html = html.replace(key, val) msg = Message(subject, recipients=new_collaborators, body=body, html=html) mail.send(msg) # TODO: send the danged email output = ",".join(new_collaborators) return Response(output, mimetype='text/plain')
def remove_access_to_screenplay(): resource_id = request.json['resource_id'] collaborator = request.json['removePerson'].lower() screenplay = Screenplay.get_by_resource_id(resource_id) if not current_user.owns_screenplay(screenplay): if not current_user.is_collaborator_on_screenplay(screenplay): return Response(collaborator, mimetype='text/plain') collaborator = current_user.email.lower() Screenplay.remove_access(resource_id, collaborator) return jsonify(collaborator=collaborator, resource_id=resource_id)
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 remove_access_to_screenplay(): resource_id = get_resource_id_from_request() collaborator = request.form.get('removePerson', None) if not collaborator: collaborator = request.json.get('removePerson', None) collaborator = collaborator.lower() screenplay = Screenplay.get_by_resource_id(resource_id) if not current_user.owns_screenplay(screenplay): if not current_user.is_collaborator_on_screenplay(screenplay): return Response(collaborator, mimetype='text/plain') collaborator = current_user.email.lower() Screenplay.remove_access(resource_id, collaborator) return jsonify(collaborator=collaborator, resource_id=resource_id)
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 email_screenplay(): resource_id = get_resource_id_from_request() title_page = request.form.get('title_page', None) if title_page is None: title_page = request.json.get('title_page', None) subject = "Screenplay" body_message = "" raw_recipients = request.form.get('recipients', None) if raw_recipients is None: raw_recipients = request.json.get('recipients', None) print request.json recipients = raw_recipients.split(',') # Build email body and html body = body_message + "\n\n\n " body += "--- This screenplay written and sent from RawScripts.com." body += " Check it out---" with app.open_resource('static/text/email.txt') as f: html_template = f.read() html = html_template.replace("FILLERTEXT", body_message) # get pdf file to attach include_title_page = title_page == '1' export_file = Screenplay.export_to_file(resource_id, 'pdf', include_title_page) _file, title, content_type = export_file filename = title + '.pdf' msg = Message(subject, recipients=recipients, body=body, html=html) msg.attach(filename, content_type, _file.getvalue()) try: mail.send(msg) except: return Response('failed', mimetype='text/plain') return Response('sent', mimetype='text/plain')
def new_screenplay(): filename = request.form.get('filename', None) if filename is None: filename = request.json.get('filename', None) user = current_user.name screenplay = Screenplay.create(filename, user) return Response(screenplay.resource_id, mimetype='text/plain')
def email_screenplay(): resource_id = get_resource_id_from_request() title_page = request.form.get('title_page', None) if title_page is None: title_page = request.json.get('title_page', None) subject = "Screenplay" body_message = "" raw_recipients = request.form.get('recipients', None) if raw_recipients is None: raw_recipients = request.json.get('recipients', None) recipients = raw_recipients.split(',') # Build email body and html body = body_message + "\n\n\n " body += "--- This screenplay written and sent from RawScripts.com." body += " Check it out---" with app.open_resource('static/text/email.txt') as f: html_template = f.read() html = html_template.replace("FILLERTEXT", body_message) # get pdf file to attach include_title_page = title_page == '1' export_file = Screenplay.export_to_file(resource_id, 'pdf', include_title_page) _file, title, content_type = export_file filename = title + '.pdf' msg = Message(subject, recipients=recipients, body=body, html=html) msg.attach(filename, content_type, _file.getvalue()) try: mail.send(msg) except: return Response('failed', mimetype='text/plain') return Response('sent', mimetype='text/plain')
def email_screenplay(): resource_id = request.form['resource_id'] title_page = request.form['title_page'] subject = request.form['subject'] body_message = request.form['body_message'] recipients = request.form['recipients'].split(',') # Build email body and html body = body_message + "\n\n\n " body += "--- This screenplay written and sent from RawScripts.com." body += " Check it out---" with app.open_resource('static/text/email.txt') as f: html_template = f.read() html = html_template.replace("FILLERTEXT", body_message) # get pdf file to attach include_title_page = title_page == '1' export_file = Screenplay.export_to_file(resource_id, 'pdf', include_title_page) _file, title, content_type = export_file filename = title + '.pdf' msg = Message(subject, recipients=recipients, body=body, html=html) msg.attach(filename, content_type, _file.getvalue()) mail.send(msg) return Response('sent', mimetype='text/plain')
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 = UsersScripts.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) screenplays = UsersScripts.query.filter_by(resource_id=resource_id).all() for screenplay in screenplays: screenplay.last_updated = now db.session.commit() if expected_version_number is None: return Response('1', mimetype='text/plain') return jsonify(success=True, versionSaved=new_version_number)
def new_note_notification(resource_id, from_user, thread_id, msg_id): for peer in Screenplay.get_all_collaborators(resource_id): if peer.lower() == from_user.lower(): continue unread = UnreadNote(resource_id=resource_id, user=peer, thread_id=thread_id, msg_id=msg_id) db.session.add(unread) db.session.commit()
def notes_view(): resource_id = request.args.get('resource_id') title = Screenplay.get_title(resource_id) notes = Note.get_by_resource_id(resource_id) output = [[n.row, n.col, json.loads(n.data), n.thread_id] for n in notes] j = json.dumps(output) # TODO: figure out correct permission here f = False # is allowed to delete threads? defaulting to NO return render_template('mobile/MobileViewNotes.html', j=j, title=title, f=f, user=current_user.name, sign_out='/user/sign-out')
def share_screenplay(): resource_id = get_resource_id_from_request() collaborators_raw = request.form.get('collaborators', None) if collaborators_raw is None: collaborators_raw = request.json.get('collaborators', None) collaborators = collaborators_raw.split(',') new_collaborators = Screenplay.add_access(resource_id, collaborators) send_email = request.form.get('sendEmail', None) if not send_email: send_email = request.json.get('sendEmail', None) if new_collaborators and send_email == 'y': user = current_user.email subject = 'Rawscripts.com: ' + user + " has shared a screenplay with you." title = Screenplay.get_title(resource_id) # build email body and html script_url = url_for('editor', _external=True, resource_id=resource_id) body = script_url + "\n\n\n " body += "--- This screenplay written and sent from RawScripts.com." divArea = '' replacements = { 'SCRIPTTITLE': title, 'USER': user, 'SCRIPTURL': script_url, 'TEXTAREA': divArea } with app.open_resource('static/text/notify.txt') as f: html = f.read() for key, val in replacements.items(): html = html.replace(key, val) msg = Message(subject, recipients=new_collaborators, body=body, html=html) mail.send(msg) # TODO: send the danged email output = ",".join(new_collaborators) return Response(output, mimetype='text/plain')
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 list(): user = current_user.email # count all unread notes by resource_id unread_notes = {} for unread_note in UnreadNote.query.filter_by(user=user).all(): r_id = unread_note.resource_id if r_id not in unread_notes: unread_notes[r_id] = 0 unread_notes[r_id] += 1 share_notifications = ShareNotify.get_by_email(user) unopened_screenplays = set( [n.resource_id for n in share_notifications if not n.opened]) shared = [] read_only = current_user.read_only_screenplays for screenplay in sorted(read_only, key=lambda obj: obj.last_updated, reverse=True): if screenplay.is_trashed or screenplay.is_hard_deleted: continue resource_id = screenplay.resource_id obj = { 'resource_id': resource_id, 'title': screenplay.title, 'last_updated': format_time(screenplay.last_updated), 'owner': screenplay.owner.email, 'new_notes': unread_notes.get(resource_id, 0), 'unopened': resource_id in unopened_screenplays } shared.append(obj) owned = [] screenplays = current_user.screenplays for screenplay in sorted(screenplays, key=lambda obj: obj.last_updated, reverse=True): if screenplay.is_hard_deleted: continue resource_id = screenplay.resource_id obj = { 'resource_id': resource_id, 'title': screenplay.title, 'last_updated': format_time(screenplay.last_updated), 'is_trashed': screenplay.is_trashed, 'shared_with': Screenplay.get_all_collaborators(resource_id), 'new_notes': unread_notes.get(resource_id, 0), 'folder': screenplay.get_folder() } owned.append(obj) folders = [[f.name, str(f.id)] for f in current_user.folders] output = [owned, shared, folders] return json.dumps(output)
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 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 list(): user = current_user.email # count all unread notes by resource_id unread_notes = {} for unread_note in UnreadNote.query.filter_by(user=user).all(): r_id = unread_note.resource_id if r_id not in unread_notes: unread_notes[r_id] = 0 unread_notes[r_id] += 1 share_notifications = ShareNotify.get_by_email(user) unopened_screenplays = set([n.resource_id for n in share_notifications if not n.opened]) shared = [] read_only = current_user.read_only_screenplays for screenplay in sorted(read_only, key=lambda obj: obj.last_updated, reverse=True): if screenplay.is_trashed or screenplay.is_hard_deleted: continue resource_id = screenplay.resource_id obj = { 'resource_id': resource_id, 'title': screenplay.title, 'last_updated': format_time(screenplay.last_updated), 'owner': screenplay.owner.email, 'new_notes': unread_notes.get(resource_id, 0), 'unopened': resource_id in unopened_screenplays } shared.append(obj) owned = [] screenplays = current_user.screenplays for screenplay in sorted(screenplays, key=lambda obj: obj.last_updated, reverse=True): if screenplay.is_hard_deleted: continue resource_id = screenplay.resource_id obj = { 'resource_id': resource_id, 'title': screenplay.title, 'last_updated': format_time(screenplay.last_updated), 'is_trashed': screenplay.is_trashed, 'shared_with': Screenplay.get_all_collaborators(resource_id), 'new_notes': unread_notes.get(resource_id, 0), 'folder': screenplay.get_folder() } owned.append(obj) folders = [[f.name, str(f.id)] for f in current_user.folders] output = [owned, shared, folders] return json.dumps(output)
def index(self): query = User.query.with_entities(db.extract('year', User.firstUse), db.extract('month', User.firstUse), db.func.count()). \ group_by(db.extract('year', User.firstUse), db.extract('month', User.firstUse)). \ order_by(db.extract('year', User.firstUse), db.extract('month', User.firstUse)) months = [] users = 0 for row in query.all(): year, month, count = row months.append({'year': year, 'month': month, 'count':count}) users += count scripts = Screenplay.count() return self.render('stats.html', months=months, users=users, scripts=scripts)
def convert_process(): fileformat = request.form["ff"] filename = "Untitled" if "filename" in request.form: filename = request.form["filename"] filename = filename.replace("%20", " ").replace("C:\\fakepath\\", "") data = request.files["script"] content = None if fileformat == "celtx": content = Celtx(data) elif fileformat == "fdx": content = FinalDraft(data) else: content = Text(data) screenplay = Screenplay.create(filename, current_user.name, content) origin = _get_origin() return render_template("UploadComplete.html", url=screenplay.resource_id, origin=origin)
def convert_process(): fileformat = request.form['ff'] filename = 'Untitled' if 'filename' in request.form: filename = request.form['filename'] filename = filename.replace('%20', ' ').replace('C:\\fakepath\\', '') data = request.files['script'] content = None if fileformat == 'celtx': content = Celtx(data) elif fileformat == 'fdx': content = FinalDraft(data) else: content = Text(data) screenplay = Screenplay.create(filename, current_user.name, content) origin = _get_origin() return render_template('UploadComplete.html', url=screenplay.resource_id, origin=origin)
def index(self): query = User.query.with_entities(db.extract('year', User.firstUse), db.extract('month', User.firstUse), db.func.count()). \ group_by(db.extract('year', User.firstUse), db.extract('month', User.firstUse)). \ order_by(db.extract('year', User.firstUse), db.extract('month', User.firstUse)) months = [] users = 0 for row in query.all(): year, month, count = row months.append({'year': year, 'month': month, 'count': count}) users += count scripts = Screenplay.count() return self.render('stats.html', months=months, users=users, scripts=scripts)
def revision_history(): user = current_user.name resource_id = request.args.get('resource_id') version = request.args.get('version') revisions = ResourceVersion.get_historical_metadata(resource_id, version) data = [] for revision in revisions: d = {'updated': revision.timestamp.strftime("%b %d")} d['version'] = revision.version d['autosave_class'] = 'autosave' if revision.autosave else 'manualsave' exports, tag = revision.get_exports_and_tags() d['export'] = exports d['tag'] = tag d['emailed'] = '' if exports.startswith('[[],') else 'Emailed' d['tagged'] = '' if tag == '' else 'Tag' data.append(d) title = Screenplay.get_title(resource_id) return render_template('revisionhistory.html', user=user, mode="PRO", resource_id=resource_id, r=data, title=title)
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)
def new_screenplay(): filename = request.form['filename'] user = current_user.name screenplay = Screenplay.create(filename, user) return Response(screenplay.resource_id, mimetype='text/plain')
def revisionduplicate_screenplay(): resource_id = request.form['resource_id'] version = int(request.form['version']) screenplay = Screenplay.duplicate(resource_id, version, current_user.name) url = '/editor?resource_id=' + screenplay.resource_id return Response(url, mimetype='text/plain')
def duplicate_screenplay(): resource_id = request.form['resource_id'] version = Screenplay.get_latest_version_number(resource_id) screenplay = Screenplay.duplicate(resource_id, version, current_user.name) url = '/editor?resource_id=' + screenplay.resource_id return Response(url, mimetype='text/plain')
def undelete_screenplay(): resource_id = get_resource_id_from_request() Screenplay.remove_from_trash(resource_id) return Response(resource_id, mimetype='text/plain')
def remove_access_to_screenplay(): resource_id = request.form['resource_id'] collaborator = request.form['removePerson'].lower() Screenplay.remove_access(resource_id, collaborator) return Response(collaborator, mimetype='text/plain')
def duplicate_screenplay(): resource_id = get_resource_id_from_request() version = Screenplay.get_latest_version_number(resource_id) screenplay = Screenplay.duplicate(resource_id, version, current_user.name) url = '/editor?resource_id=' + screenplay.resource_id return Response(url, mimetype='text/plain')
def hard_delete_screenplay(): resource_id = get_resource_id_from_request() Screenplay.hard_delete(resource_id) return Response(resource_id, mimetype='text/plain')