Sindbad~EG File Manager
from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session, app, json
from .. import Cryptography,Auth,RouteGroup
from collections import defaultdict
from urllib.parse import unquote
from core.library.helper import Helper
from datetime import timedelta,date,datetime
""" Library """
from core.library.email import EMAIL
""" Models """
from core.model.BoModel import BoModel
from core.model.UserModel import UserModel
import boto3, botocore
from botocore.exceptions import ClientError
import logging
import os
from werkzeug.utils import secure_filename
app = Blueprint('bo', __name__)
# Autologin for BackOffice Dashboard
@app.route('/login', methods = ["GET"])
def Login():
return render_template('BO/login.html')
@app.route('/login', methods = ["POST"])
def Postlogin():
email = request.values.get("email")
password = request.values.get("password")
user = BoModel().get_admin_user(email,password)
if user:
Auth.bo_login(user)
return redirect(url_for("bo.Dashboard"))
else:
return redirect(url_for('bo.Login'))
@app.route('/logout', methods = ["GET"])
@RouteGroup.bo_login_required
def Logout():
Auth.logout()
return redirect(url_for('bo.Login'))
@app.route('/dashboard', methods = ["GET"])
@RouteGroup.bo_login_required
def Dashboard():
qes_data = BoModel().get_q_count_data()
now = datetime.now().strftime('%Y-%m-%d %H:%M')
session_data = BoModel().get_session_count_data(now)
return render_template("/BO/dashboard.html",qes_data=qes_data,session_data=session_data)
@app.route('/question_index/<status_id>', methods = ["GET"])
@RouteGroup.bo_login_required
def Question_index(status_id):
question_data = BoModel().get_all_questions(status_id)
return render_template("/BO/question_index.html",question_data=question_data,status_id=status_id)
@app.route('/session_index', methods = ["GET"])
@RouteGroup.bo_login_required
def Session_index():
get_sessions = BoModel().get_all_sessions()
return render_template("/BO/session.html",get_sessions=get_sessions)
@app.route('/create_session', methods = ["GET"])
@RouteGroup.bo_login_required
def Create_session():
created_at = datetime.now().strftime('%Y-%m-%d %H:%M')
session_id = BoModel().create_session(created_at)
return redirect(url_for('bo.Session',s_id=session_id))
@app.route('/session/<s_id>', methods = ["GET"])
@RouteGroup.bo_login_required
def Session(s_id):
get_sessions = BoModel().get_session_data(s_id)
return render_template("/BO/add_edit_sesion.html",s_data=get_sessions,s_id=s_id)
@app.route('/session/<s_id>', methods = ["POST"])
@RouteGroup.bo_login_required
def Post_session(s_id):
session_name = request.values.get("session_name")
session_start_time = request.values.get("session_start_date")
session_end_time = request.values.get("session_end_date")
is_active = request.values.get("is_active") or 0
data = {
"session_name":session_name,
"startdate":session_start_time,
"enddate":session_end_time,
"is_active":is_active
}
BoModel().update_session(s_id,data)
return redirect(url_for('bo.Session_index'))
@app.route('/session_questions/<s_id>', methods = ["GET"])
@RouteGroup.bo_login_required
def get_session_questions(s_id):
session_questions = BoModel().get_session_questions(s_id)
return render_template('/BO/session_questions.html',session_questions=session_questions)
@app.route('/questions_to_session/<s_id>', methods = ["GET"])
@RouteGroup.bo_login_required
def questions_to_session(s_id):
questions = BoModel().get_all_questions_for_session(s_id)
return render_template('/BO/questions_to_session.html',questions=questions,s_id=s_id)
@app.route("/add_question_session/<s_id>",methods=["GET","POST"])
@RouteGroup.bo_login_required
def add_question_session(s_id):
q_ids = request.values.get('question_id')
q_ids = list(q_ids.split(","))
if q_ids:
BoModel().add_question_to_session(s_id,q_ids)
return jsonify()
@app.route("/remove_question_session",methods=["GET","POST"])
@RouteGroup.bo_login_required
def remove_question_session():
mq_id = request.values.get('mq_id')
BoModel().remove_question_to_session(mq_id)
return jsonify()
@app.route("/edit_questions",methods=["GET","POST"])
@RouteGroup.bo_login_required
def edit_questions():
q_id = request.values.get('q_id')
data = BoModel().get_question_data(q_id)
opt_data = UserModel().get_question_option(q_id)
categories = UserModel().get_mcq_category()
return render_template("/BO/edit_question.html",q_data=data,opt_data=opt_data,categories=categories)
@app.route('/question_edit/<q_id>',methods=["POST"])
@RouteGroup.bo_login_required
def question_post(q_id):
en_q_id = q_id
q_id = int(Cryptography.decrypt(q_id))
category = request.values.getlist('category') or None
category_ids = ','.join(category)
question = request.form.get('question') or None
explanation = request.form.get('explanation') or None
q_data = {
'question':question,
'explanation':explanation,
'category_ids': category_ids,
}
correct = request.form.get('opt')
option = [
{
"opt_id":request.values.get("opt_1_id") or None,
"option_val":request.values.get("option_1"),
"is_answer": 1 if correct == "A" else None,
"q_id":q_id
},
{
"opt_id":request.values.get("opt_2_id") or None,
"option_val":request.values.get("option_2"),
"is_answer": 1 if correct == "B" else None,
"q_id":q_id
},
{
"opt_id":request.values.get("opt_3_id") or None,
"option_val":request.values.get("option_3"),
"is_answer": 1 if correct == "C" else None,
"q_id":q_id
},
{
"opt_id":request.values.get("opt_4_id") or None,
"option_val":request.values.get("option_4"),
"is_answer": 1 if correct == "D" else None,
"q_id":q_id
}
]
UserModel().insert_update_opt(option)
UserModel().update_question(q_data,q_id)
return redirect(url_for('bo.Question_index',status_id='0,1,2'))
@app.route('/question_view/<q_id>', methods = ["GET"])
@RouteGroup.bo_login_required
def question_view(q_id):
# q_id = int(Cryptography.decrypt(q_id))
question = UserModel().get_question(q_id)
opt_data = UserModel().get_question_option(q_id)
return render_template('BO/question_view.html',q_data=question,opt_data=opt_data)
@app.route('/quiz_master', methods = ["GET" , "POST"])
@RouteGroup.bo_login_required
def QuizMaster():
searchUser = None
if request.method == 'POST':
search_data = request.values.get('search_users')
search_data = search_data.strip()
if "-" in search_data:
searchData = search_data.split("-")
searchUser = searchData[0]+"|"+searchData[1]
elif " " in search_data:
searchData = search_data.split(" ")
searchUser = searchData[0]+"|"+searchData[1]
else:
searchUser = search_data
quiz_masters = BoModel().usp_search_users(searchUser)
return render_template('BO/quiz_master.html',quiz_masters=quiz_masters)
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists