コード例 #1
0
ファイル: next_draft.py プロジェクト: jbowens/peernote
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
コード例 #2
0
ファイル: email_a_review.py プロジェクト: jbowens/peernote
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