def next_draft(): current_app.logger.debug('creating next draft') if 'did' in request.form and 'uid' in request.form: did = request.form['did'] uid = request.form['uid'] draft = Draft.query.filter_by(did=did).first() if not draft or draft.uid != g.user.uid or draft.finalized: return jsonify(error="Bad params"), 400 # finalize the draft draft.finalized = True db.session.add(draft) db.session.flush() # make a new draft for the writer new_draft = Draft.next_draft(draft) db.session.add(new_draft) db.session.commit() return jsonify(status='success', did=new_draft.did, version=new_draft.version, timestamp=new_draft.pretty_modified_date() ) else: return jsonify(error="Bad params"), 400
def email_a_review(): current_app.logger.debug('emailing review for a draft') if 'did' in request.form and 'uid' in request.form and 'email' in request.form: did = request.form['did'] uid = request.form['uid'] email = request.form['email'] draft = Draft.query.filter_by(did=did).first() if not draft or draft.uid != g.user.uid: return jsonify(error="Invalid draft"), 400 if not validate_email(email, check_mx=True): return jsonify(error="Invalid email"), 400 # create review pointing to the draft review = Review() review.did = draft.did review.email = email # really good code to generate a unique url hash for the review unique_hash = False gen_hash = '' while not unique_hash: gen_hash = uuid.uuid4().hex queried_review = Review.query.filter_by(urlhash=gen_hash).first() if not queried_review: unique_hash = True review.urlhash = gen_hash db.session.add(review) # if the draft was not finalized, finalize it and create a new one new_did = None new_version = None new_timestamp = None if not draft.finalized: draft.finalized = True db.session.add(draft) db.session.flush() # make a new draft for the writer new_draft = Draft.next_draft(draft) db.session.add(new_draft) db.session.flush() new_did = new_draft.did new_version = new_draft.version new_timestamp = new_draft.pretty_modified_date() else: db.session.flush() review_url = 'http://' + app.config.get('SERVER_HOST') + '/essays/review/' + review.urlhash # send emailz params = { 'sender': g.user.first_name + ' ' + g.user.last_name, 'review_url': review_url } mailer = Mailer() mailer.send(ReviewADraft(), params, email) # create notification for user receiving review if necessary receiving_user = User.query.filter_by(email=email).first() if receiving_user: notification = Notification() notification.uid = receiving_user.uid notification.from_uid = uid notification.short_template = 'requested a review.' notification.url = review_url notification.long_template = '{{ sender }} wrote an essay and wants you to <a href="' + review_url +'"> review </a> it.' db.session.add(notification) db.session.commit() return jsonify(status='success', new_did=new_did, new_version=new_version, new_timestamp=new_timestamp ) else: return jsonify(error="Bad params"), 400