def display_question(id, count_view=True):
    question_list = ui.get_record_from_sql_db('question', "id=%s" % (id))
    title = question_list[0][4]
    message = question_list[0][5]
    view_number = question_list[0][2] + 1
    ui.update_record('question', "view_number=%s" % (view_number),
                     "id=%s" % (id))
    answer_list = ui.get_record_from_sql_db('answer', "question_id=%s" % (id))
    comment_list = ui.get_record_from_sql_db('comment',
                                             "question_id=%s" % (id))
    answer_comment_list = []
    for answer in answer_list:
        answer_comment_list.append(
            ui.get_record_from_sql_db('comment', "answer_id=%s" % (answer[0])))
    # SELECT tag.name FROM tag JOIN question_tag ON question_tag.tag_id=tag.id WHERE question_tag.question_id=1;
    tag_list = ui.get_record_from_tag(
        'tag', 'question_tag ON question_tag.tag_id=tag.id',
        "question_tag.question_id=%s" % (id))
    return render_template('display_question.html',
                           id=id,
                           title=title,
                           message=message,
                           list_answers=answer_list,
                           list_comments=comment_list,
                           list_answer_comments=answer_comment_list,
                           tag_list=tag_list)
def delete_tag(question_id):
    tag_name = request.args.get('tag_name')
    tag_id = ui.get_record_from_sql_db('tag', "name='%s'" % (tag_name))[0][0]
    ui.delete_record('question_tag',
                     "question_id=%s AND tag_id=%s" % (question_id, tag_id))
    tag_id_in_question_tag = ui.get_record_from_sql_db('question_tag',
                                                       "tag_id=%s" % (tag_id))
    if not tag_id_in_question_tag:
        ui.delete_record('tag', "id=%s" % (tag_id))
    return redirect('/question/' + question_id)
def delete_question(question_id):
    answer_list = ui.get_record_from_sql_db('answer',
                                            "question_id=%s" % (question_id))
    for record in answer_list:
        ui.delete_record('comment', "answer_id=%s" % (record[0]))
    ui.delete_record('answer', "question_id=%s" % (question_id))
    ui.delete_record('question_tag', "question_id=%s" % (question_id))
    ui.delete_record('comment', "question_id=%s" % (question_id))
    ui.delete_record('question', "id=%s" % (question_id))
    return redirect('/')
def add_new_tag(question_id):
    if request.form['new_tag']:
        if not ui.get_record_from_sql_db(
                'tag', "name='%s'" % (request.form['new_tag'])):
            ui.add_item_to_tag('tag', request.form['new_tag'])
        new_tag_id_list = ui.get_tag_id_by_name(request.form['new_tag'])
        if not ui.get_record_from_sql_db(
                'question_tag', "question_id=%s AND tag_id=%s" %
            (question_id, new_tag_id_list[0][0])):
            ui.add_item_to_question_tag('question_tag', question_id,
                                        new_tag_id_list[0][0])
    else:
        existing_tag_id_list = ui.get_tag_id_by_name(
            request.form['existing_tag'])
        if not ui.get_record_from_sql_db(
                'question_tag', "question_id=%s AND tag_id=%s" %
            (question_id, existing_tag_id_list[0][0])):
            ui.add_item_to_question_tag('question_tag', question_id,
                                        existing_tag_id_list[0][0])
    return redirect('/question/' + question_id)
def add_new_answer_comment():
    new_answer_comment_user = request.form['new_answer_comment_user']
    user_id = ui.handle_query(
        """SELECT id FROM users WHERE user_name='{}';""".format(
            new_answer_comment_user))
    ui.handle_query(
        """INSERT INTO comment (answer_id, message, submission_time, users_id)
                    VALUES ({}, '{}', '{}', {});""".format(
            request.form['answer_id'], request.form['new_comment_message'],
            str(datetime.now())[:-7], user_id[0][0]))
    question_id = ui.get_record_from_sql_db(
        'answer', 'id=%s' % (request.form["answer_id"]))[0][3]
    return redirect('/question/' + str(question_id))
def vote_question_up():
    id = request.args.get('id')
    question_list = ui.get_record_from_sql_db('question', "id=%s" % (id))
    vote_number = question_list[0][3] + 1
    ui.update_record('question', "vote_number=%s" % (vote_number),
                     "id=%s" % (id))
    query = """SELECT users_id \
            FROM question
            WHERE id = %s""" % (id)
    user_id = ui.handle_query(query)[0][0]
    query = """UPDATE users \
            SET reputation = reputation + 5 \
            WHERE id = %s""" % user_id
    ui.handle_query(query)
    return redirect('/')
def add_answer_image_post(id):
    if 'file' not in request.files:
        flash('No file part')
        return redirect(request.url)
    file = request.files['file']
    if file.filename == '':
        flash('No selected file')
        return redirect(request.url)
    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        ui.update_record('answer', "image='/images/%s'" % (filename),
                         "id=%s" % (id))
        answer = ui.get_record_from_sql_db('answer', "id=%s" % (id))
        question_id = answer[0][3]
        return app_logic.display_question(question_id, count_view=False)
def vote_answer_down():
    id = request.args.get('id')
    answer_list = ui.get_record_from_sql_db('answer', "id=%s" % (id))
    vote_number = answer_list[0][2] - 1
    ui.update_record('answer', "vote_number=%s" % (vote_number),
                     "id=%s" % (id))
    question_id = answer_list[0][3]
    query = """SELECT users_id \
            FROM answer
            WHERE id = %s""" % (id)
    user_id = ui.handle_query(query)[0][0]
    query = """UPDATE users \
            SET reputation = reputation - 2 \
            WHERE id = %s""" % user_id
    ui.handle_query(query)
    return display_question(question_id, count_view=False)