Esempio n. 1
0
def add_edit_question(question_id=None):
    try:
        user_id = data_manager.get_userid_by_username(session['username'])
    except KeyError:
        return redirect('/')
    if question_id and request.method == 'GET' and user_id == data_manager.get_foreign_key_by_id(
            data_manager.question_db, 'users_id',
            question_id)[0]['users_id']:  # edit question
        question = data_manager.get_line_data_by_id(data_manager.question_db,
                                                    question_id)[0]  # edit get
        return render_template('add_questions_head.html',
                               question=question,
                               question_id=question_id,
                               user_id=user_id)

    elif request.method == 'POST' and question_id and user_id == data_manager.get_foreign_key_by_id(
            data_manager.question_db, 'users_id', question_id)[0]['users_id']:
        title = request.form['question_title']  # edit post
        message = request.form['question_message']
        data_manager.update_question(question_id, title, message)
        return redirect('/question/{}'.format(question_id))

    elif request.method == 'GET' and question_id is None:  # add get
        return render_template('add_questions_head.html',
                               question_id=question_id,
                               user_id=user_id)

    elif request.method == 'POST' and question_id is None:  # add post
        user_id = data_manager.get_userid_by_username(session.get('username'))
        data_manager.add_question(request.form['question_title'],
                                  request.form['question'], user_id)
        question_id = data_manager.get_last_question_id()
    else:
        flash('Invalid user')
    return redirect('/question/{}'.format(question_id))
Esempio n. 2
0
def delete_question(question_id=None):
    try:
        user_id = data_manager.get_userid_by_username(session['username'])
    except KeyError:
        return redirect('/')
    if user_id == data_manager.get_foreign_key_by_id(
            data_manager.question_db, 'users_id', question_id)[0]['users_id']:
        data_manager.delete_line_by_foreign_id(data_manager.comment_db,
                                               'question_id', question_id)
        filename = 'static/image_for_question' + str(question_id) + '.png'
        if util.check_file(filename):
            util.delete_file(filename)
        answer_ids_to_delete = data_manager.get_ids_by_foreign_id(
            data_manager.answer_db, 'question_id', question_id)
        for answer_id in answer_ids_to_delete:
            data_manager.delete_line_by_foreign_id(data_manager.comment_db,
                                                   'answer_id',
                                                   answer_id['id'])
            filename = 'static/image_for_answer' + str(
                answer_id['id']) + '.png'
            if util.check_file(filename):
                util.delete_file(filename)
        data_manager.delete_answer_by_question_id(question_id)
        data_manager.delete_question(question_id)
    else:
        flash('Invalid user')
    return redirect('/list')
Esempio n. 3
0
def accept_answer(answer_id):
    answer = data_manager.get_line_data_by_id(data_manager.answer_db,
                                              answer_id)
    question_users_id = data_manager.get_foreign_key_by_id(
        data_manager.question_db, 'users_id',
        answer[0]['question_id'])[0]['users_id']
    try:
        user_id = data_manager.get_userid_by_username(session['username'])
    except KeyError:
        return redirect('/')
    if answer[0]['accepted_status'] is False and user_id == question_users_id:
        answer_statuses = list(
            map(
                lambda x: x['accepted_status'],
                data_manager.get_lines_data_by_foreign_id(
                    data_manager.answer_db, 'question_id',
                    answer[0]['question_id'])))
        if True not in answer_statuses:
            data_manager.accept_answer(answer_id)
        else:
            flash('You can only accept one answer')
    else:
        flash('Invalid user')
    user_id = data_manager.get_user_id_by_answer_id(answer_id)
    data_manager.increase_reputation('accept', user_id)
    question_id = data_manager.get_foreign_key_by_id(
        data_manager.answer_db, 'question_id', answer_id)[0]['question_id']
    return redirect('/question/{}'.format(question_id))
Esempio n. 4
0
def edit_comment(comment_id):
    try:
        user_id = data_manager.get_userid_by_username(session['username'])
    except KeyError:
        return redirect('/')
    if request.method == 'GET' and user_id == data_manager.get_foreign_key_by_id(
            data_manager.comment_db, 'users_id', comment_id)[0]['users_id']:
        comment = data_manager.get_line_data_by_id(data_manager.comment_db,
                                                   comment_id)
        return render_template('add_edit_comment_head.html',
                               comment_id=comment_id,
                               comment=comment,
                               user_id=user_id)

    elif request.method == 'POST' and user_id == data_manager.get_foreign_key_by_id(
            data_manager.comment_db, 'users_id', comment_id)[0]['users_id']:
        data_manager.update_comment_message_submt_editedc_by_id(
            comment_id, request.form['comment'], util.get_time())
    answer_id = data_manager.get_foreign_key_by_id(data_manager.comment_db,
                                                   'answer_id',
                                                   comment_id)[0]['answer_id']
    if answer_id:
        question_id = data_manager.get_foreign_key_by_id(
            data_manager.answer_db, 'question_id', answer_id)[0]['question_id']
    else:
        question_id = data_manager.get_foreign_key_by_id(
            data_manager.comment_db, 'question_id',
            comment_id)[0]['question_id']
    if not user_id == data_manager.get_foreign_key_by_id(
            data_manager.comment_db, 'users_id', comment_id)[0]['users_id']:
        flash('Invalid user')
    return redirect('/question/{}'.format(question_id))
Esempio n. 5
0
def index():
    user_id = data_manager.get_userid_by_username(session.get('username'))
    questions = data_manager.get_five_latest_submitted_titles_with_ids_from_table(
        'question')
    header = data_manager.get_column_names_of_table(
        data_manager.question_db)[4]
    return render_template('index_head.html',
                           questions=questions,
                           header=header,
                           user_id=user_id)
Esempio n. 6
0
def route_user_list():
    user_id = data_manager.get_userid_by_username(session.get('username'))
    users = data_manager.import_from_db(data_manager.users_db)
    headers = data_manager.get_column_names_of_table(data_manager.users_db)
    if request.args:
        users = data_manager.sort_table(data_manager.users_db,
                                        request.args['order_by'],
                                        request.args['order_direction'])
    return render_template('user_list_head.html',
                           users=users,
                           headers=headers,
                           user_id=user_id)
Esempio n. 7
0
def search():
    user_id = data_manager.get_userid_by_username(session.get('username'))
    search_phrase = request.form['search_phrase']
    headers = data_manager.get_column_names_of_table(data_manager.question_db)
    questions = data_manager.search(search_phrase)
    answers = data_manager.search_answers(search_phrase)
    return render_template('search_results_head.html',
                           questions=questions,
                           answers=answers,
                           headers=headers,
                           search_phrase=search_phrase,
                           user_id=user_id)
Esempio n. 8
0
def add_comment(question_id=None, answer_id=None, comment=None, comment_id=-1):
    try:
        user_id = data_manager.get_userid_by_username(session['username'])
    except KeyError:
        return redirect('/')
    if request.method == 'GET':
        if request.path.startswith("/q"):
            question_title = data_manager.get_line_data_by_id(
                data_manager.question_db, question_id)[0]['title']
            return render_template('add_edit_comment_head.html',
                                   question_title=question_title,
                                   comment=comment,
                                   comment_id=comment_id,
                                   user_id=user_id)
        else:
            answer_message = data_manager.get_line_data_by_id(
                data_manager.answer_db, answer_id)[0]['message']
            return render_template('add_edit_comment_head.html',
                                   answer_id=answer_id,
                                   answer_message=answer_message,
                                   comment=comment,
                                   comment_id=comment_id,
                                   user_id=user_id)

    elif request.method == 'POST':
        user_id = data_manager.get_userid_by_username(session.get('username'))
        if request.path.startswith("/q"):
            data_manager.add_comment_to_table(data_manager.comment_db,
                                              'question_id', question_id,
                                              request.form['comment'],
                                              util.get_time(), 0, user_id)
        else:
            question_id = data_manager.get_foreign_key_by_id(
                data_manager.answer_db, 'question_id',
                answer_id)[0]['question_id']
            data_manager.add_comment_to_table(data_manager.comment_db,
                                              'answer_id', answer_id,
                                              request.form['comment'],
                                              util.get_time(), 0, user_id)
        return redirect('/question/{}'.format(question_id))
Esempio n. 9
0
def get_qestions_by_tag(tag_name):
    user_id = data_manager.get_userid_by_username(session.get('username'))
    headers = data_manager.get_column_names_of_table(data_manager.question_db)
    questions = data_manager.get_questions_by_tag(tag_name)
    if request.args:
        questions = util.sort_list_of_table_rows(
            questions, request.args['order_by'],
            request.args['order_direction'])
    return render_template('questions_by_tag_head.html',
                           questions=questions,
                           headers=headers,
                           tag_name=tag_name,
                           user_id=user_id)
Esempio n. 10
0
def post_answer(question_id, answer_id=""):
    try:
        user_id = data_manager.get_userid_by_username(session['username'])
    except KeyError:
        return redirect('/')
    if request.path == '/question/' + str(question_id) + '/' + str(
            answer_id) and request.method == 'GET':
        single_question = data_manager.get_line_data_by_id(
            data_manager.question_db, question_id)
        question_title = single_question[0]['title']
        answer = data_manager.get_line_data_by_id(data_manager.answer_db,
                                                  answer_id)[0]
        return render_template('post-answer_head.html',
                               question_title=question_title,
                               answer=answer,
                               answer_id=answer_id,
                               user_id=user_id)

    elif request.path == '/question/' + str(question_id) + '/' + str(
            answer_id) and request.method == 'POST':
        form_answer = request.form['answer_message']
        data_manager.update_answer(answer_id, form_answer)
        return redirect('/question/{}'.format(question_id))
    else:
        if request.method == 'POST':
            user_id = data_manager.get_userid_by_username(
                session.get('username'))
            form_answer = request.form['answer_message']
            data_manager.add_answer(question_id, form_answer, user_id)
            return redirect('/question/{}'.format(question_id))
        else:
            single_question = data_manager.get_line_data_by_id(
                data_manager.question_db, question_id)
            question_title = single_question[0]['title']
            return render_template('post-answer_head.html',
                                   question_title=question_title,
                                   answer_id=answer_id,
                                   user_id=user_id)
Esempio n. 11
0
def delete_tag(question_id=None, tag_id=None):
    try:
        user_id = data_manager.get_userid_by_username(session['username'])
    except KeyError:
        return redirect('/')
    if user_id == data_manager.get_foreign_key_by_id(
            data_manager.question_db, 'users_id', question_id)[0]['users_id']:
        try:
            data_manager.delete_tag(question_id, tag_id)
        finally:
            return redirect('/question/{}'.format(question_id))
    else:
        flash('Invalid user')
        return redirect('/question/{}'.format(question_id))
Esempio n. 12
0
def delete_question_image(question_id):
    try:
        user_id = data_manager.get_userid_by_username(session['username'])
    except KeyError:
        return redirect('/')
    if user_id == data_manager.get_foreign_key_by_id(
            data_manager.question_db, 'users_id', question_id)[0]['users_id']:
        filename = 'static/image_for_question' + str(question_id) + '.png'
        util.delete_file(filename)
        data_manager.update_image_data_by_id(data_manager.question_db,
                                             question_id, 'no image')
    else:
        flash('Invalid user')
    return redirect('/question/{}'.format(question_id))
Esempio n. 13
0
def add_image_a(question_id, answer_id):
    try:
        user_id = data_manager.get_userid_by_username(session['username'])
    except KeyError:
        return redirect('/')
    if request.method == 'GET' and user_id == data_manager.get_foreign_key_by_id(
            data_manager.answer_db, 'users_id', answer_id)[0]['users_id']:
        return render_template('add-image_head.html', user_id=user_id)
    elif request.method == 'POST' and user_id == data_manager.get_foreign_key_by_id(
            data_manager.answer_db, 'users_id', answer_id)[0]['users_id']:
        url = request.form['URL']
        filename = 'static/image_for_answer' + str(answer_id) + '.png'
        util.save_image_to_file(url, filename)
        data_manager.update_image_data_by_id(data_manager.answer_db, answer_id,
                                             filename)
    else:
        flash('Invalid user')
    return redirect('/question/{}'.format(question_id))
Esempio n. 14
0
def vote(question_id=None, id=None, file_=None, method=None):
    try:
        users_id = data_manager.get_userid_by_username(session['username'])
    except KeyError:
        return redirect('/')
    answers = data_manager.sort_table(data_manager.answer_db, 'id', 'asc')
    questions = data_manager.sort_table(data_manager.question_db, 'id', 'asc')
    voted_questions_of_user = list(
        map(
            lambda x: x['question_id'],
            data_manager.get_foreign_key_by_id(data_manager.user_vote_db,
                                               'question_id', users_id)))
    voted_answers_of_user = list(
        map(
            lambda x: x['answer_id'],
            data_manager.get_foreign_key_by_id(data_manager.user_vote_db,
                                               'answer_id', users_id)))
    if file_ == 'answer'\
            and not users_id == data_manager.get_foreign_key_by_id(data_manager.answer_db, 'users_id', id)[0]['users_id']\
            and answers[id-1]['id'] not in voted_answers_of_user:
        data_manager.change_vote_number_in_table(data_manager.answer_db, id,
                                                 method)
        data_manager.add_vote_to_user_vote(None, id, users_id)
        user_id = data_manager.get_user_id_by_answer_id(id)
        if method == 'up':
            data_manager.increase_reputation('answer', user_id=user_id)
        elif method == 'down':
            data_manager.reduce_reputation(user_id=user_id)
    elif file_ == 'question'\
            and not users_id == data_manager.get_foreign_key_by_id(data_manager.question_db, 'users_id', id)[0]['users_id'] \
            and questions[id-1]['id'] not in voted_questions_of_user:
        data_manager.change_vote_number_in_table(data_manager.question_db, id,
                                                 method)
        data_manager.add_vote_to_user_vote(id, None, users_id)
        user_id = data_manager.get_user_id_by_question_id(id)
        if method == 'up':
            data_manager.increase_reputation('question', user_id=user_id)
        elif method == 'down':
            data_manager.reduce_reputation(user_id=user_id)
    else:
        flash('Invalid user')
    return redirect('/question/{}'.format(question_id))
Esempio n. 15
0
def delete_answer(answer_id=None):
    try:
        user_id = data_manager.get_userid_by_username(session['username'])
    except KeyError:
        return redirect('/')
    question_id = data_manager.get_foreign_key_by_id(
        data_manager.answer_db, 'question_id', answer_id)[0]['question_id']
    if user_id == data_manager.get_foreign_key_by_id(data_manager.answer_db,
                                                     'users_id',
                                                     answer_id)[0]['users_id']:
        data_manager.delete_line_by_foreign_id(data_manager.comment_db,
                                               'answer_id', answer_id)
        question_id = data_manager.delete_answer_by_id(
            answer_id)['question_id']
        filename = 'static/image_for_answer' + str(answer_id) + '.png'
        if util.check_file(filename):
            util.delete_file(filename)
    else:
        flash('Invalid user')
    return redirect('/question/{}'.format(question_id))
Esempio n. 16
0
def delete_comment(comment_id):
    try:
        user_id = data_manager.get_userid_by_username(session['username'])
    except KeyError:
        return redirect('/')
    answer_id = data_manager.get_foreign_key_by_id(data_manager.comment_db,
                                                   'answer_id',
                                                   comment_id)[0]['answer_id']
    if answer_id:
        question_id = data_manager.get_foreign_key_by_id(
            data_manager.answer_db, 'question_id', answer_id)[0]['question_id']
    else:
        question_id = data_manager.get_foreign_key_by_id(
            data_manager.comment_db, 'question_id',
            comment_id)[0]['question_id']
    if user_id == data_manager.get_foreign_key_by_id(
            data_manager.comment_db, 'users_id', comment_id)[0]['users_id']:
        data_manager.delete_line_by_id(data_manager.comment_db, comment_id)
    else:
        flash('Invalid user')
    return redirect('/question/{}'.format(question_id))
Esempio n. 17
0
def add_tag_to_question(question_id=None):
    try:
        user_id = data_manager.get_userid_by_username(session['username'])
    except KeyError:
        return redirect('/')
    if request.method == 'GET' and user_id == data_manager.get_foreign_key_by_id(
            data_manager.question_db, 'users_id', question_id)[0]['users_id']:
        question = data_manager.get_question_by_id(question_id)  # add tag get
        question_title = question[0]['title']
        tags = data_manager.get_tags(question_id)
        return render_template('add_tag_head.html',
                               question_title=question_title,
                               tags=tags,
                               question_id=question_id,
                               user_id=user_id)
    elif request.method == 'POST' and user_id == data_manager.get_foreign_key_by_id(
            data_manager.question_db, 'users_id', question_id)[0]['users_id']:
        question = data_manager.get_question_by_id(question_id)
        question_id_to_add = question[0]['id']
        tag = request.form['new_tag']
        data_manager.add_tag_to_question(question_id_to_add, tag)
    else:  # not authorized to add tag
        flash('Invalid user')
    return redirect('/question/{}'.format(question_id))
Esempio n. 18
0
def route_question(question_id):
    user_id = data_manager.get_userid_by_username(session.get('username'))
    question = data_manager.get_line_data_by_id(data_manager.question_db,
                                                question_id)
    headers_q = data_manager.get_column_names_of_table(
        data_manager.question_db)
    headers_c = data_manager.get_column_names_of_table(
        data_manager.comment_db)[3:5]
    headers_a = data_manager.get_column_names_of_table(data_manager.answer_db)
    comments_q = data_manager.get_comments_data_by_foreign_id(
        'question_id', question_id)
    answers = data_manager.get_lines_data_by_foreign_id(
        data_manager.answer_db, 'question_id', question_id)
    filename_q = '/static/image_for_question' + str(question_id) + '.png'
    image_q = util.check_file(filename_q.lstrip("/"))
    tags = data_manager.get_tags(question_id)
    answer_ids = {}
    for answer in answers:
        answer_ids[answer['id']] = [
            util.check_file('static/image_for_answer' + str(answer['id']) +
                            '.png'),
            '/static/image_for_answer' + str(answer['id']) + '.png',
            data_manager.get_lines_data_by_foreign_id(data_manager.comment_db,
                                                      'answer_id',
                                                      answer['id'])
        ]
    if user_id:
        answer_statuses = list(
            map(
                lambda x: x['accepted_status'],
                data_manager.get_lines_data_by_foreign_id(
                    data_manager.answer_db, 'question_id', question_id)))
        voted_questions_of_user = list(
            map(
                lambda x: x['question_id'],
                data_manager.get_foreign_key_by_id(data_manager.user_vote_db,
                                                   'question_id', user_id)))
        voted_answers_of_user = list(
            map(
                lambda x: x['answer_id'],
                data_manager.get_foreign_key_by_id(data_manager.user_vote_db,
                                                   'answer_id', user_id)))
        return render_template('question_head.html',
                               question_id=question_id,
                               question=question,
                               headers_q=headers_q,
                               comments_q=comments_q,
                               headers_c=headers_c,
                               answers=answers,
                               headers_a=headers_a,
                               image_q=image_q,
                               filename_q=filename_q,
                               answer_ids=answer_ids,
                               tags=tags,
                               user_id=user_id,
                               voted_questions_of_user=voted_questions_of_user,
                               voted_answers_of_user=voted_answers_of_user,
                               answer_statuses=answer_statuses)
    else:
        return render_template('question_head.html',
                               question_id=question_id,
                               question=question,
                               headers_q=headers_q,
                               comments_q=comments_q,
                               headers_c=headers_c,
                               answers=answers,
                               headers_a=headers_a,
                               image_q=image_q,
                               filename_q=filename_q,
                               answer_ids=answer_ids,
                               tags=tags)
Esempio n. 19
0
def tag_page():
    user_id = data_manager.get_userid_by_username(session.get('username'))
    data = data_manager.get_tags_and_question_count()
    return render_template('all_tags_head.html', data=data, user_id=user_id)