Sindbad~EG File Manager
from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session, app
from core.model.UserModel import UserModel
from core.model.AbstractModel import AbstractModel
from core.model.BoModel import BoModel
from random import randint
import datetime
from core.library.email import EMAIL
from datetime import timedelta,date,datetime
from core.library.cryptography import Cryptography
from core.library.route_group import RouteGroup
from core.library.auth import Auth
from core.library.helper import Helper
import ast
# import collections
from urllib.parse import unquote
from collections import defaultdict
#S3 import
import os
from werkzeug.utils import secure_filename
from os.path import join, dirname, realpath
import boto3, botocore
from botocore.exceptions import ClientError
bucketname = "tnoa2022"
class OPCController:
def AbstractsIndex(abs_type,conf_id,conf_key):
society_id = Auth.get_conference(conf_id).get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
data = UserModel().get_abstract_home(user_id,abs_type,conf_id)
my_abstracts = data[0]
eng_abstracts = data[1]
validation = AbstractModel().abstract_home_validation(abs_type,user_id,conf_id)
if validation["status"] != 1 :
flash(validation["msg"])
return render_template('users/TNOA24/OPC/abstract.html',data=my_abstracts,abs_type='OPC',data1=eng_abstracts,data2=validation,lent=len(my_abstracts),conf_id=conf_id,conf_key=conf_key)
def main_layout(abs_type,abs_id,conf_id,conf_key):
# abs_id = Cryptography.decrypt(abs_id)
return render_template('users/TNOA24/OPC/main_OPC.html',abs_type=abs_type,abs_id=abs_id,conf_id=conf_id,conf_key=conf_key)
def New(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
society_id = confData.get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
validation = AbstractModel().abstract_home_validation(abs_type,user_id,conf_id)
if validation["status"] == 1:
created_at = datetime.now()
result = UserModel().new_abs(user_id,abs_type,34,created_at,conf_id,confData['conf_schema'])
abs_id = Cryptography.encrypt(int(result[0]))
return abs_id
else:
return redirect(url_for('main.AbstractsIndex',abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
def Step1(abs_type,conf_id,conf_key):
# print("hello")
confData = Auth.get_conference(conf_id)
json = {'msg':'','status' : 1,'data':''}
abs_id = int(Cryptography.decrypt(unquote(request.values.get('abs_id'))))
society_id = confData.get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
user_info = UserModel().get_users_member_no(user_id)#getting name and membership for the user_id
# categories = UserModel().get_categories(abs_type,conf_id)
categories = UserModel().get_categories_v1(abs_type,conf_id)
if(int(abs_id) > 0):
abstract_info = AbstractModel().get_abstracts_by_user_abs_id(user_id,abs_id,confData['conf_schema'])#getting abstract info from abstract table
if abstract_info == [] :
json = {'msg':'Abstract Not Found<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
return jsonify(json)
if (abstract_info["abs_status_id"] != 0):
json = {'msg':'Abstract already submitted<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
return jsonify(json)
else:
json["data"] = render_template('users/TNOA24/OPC/step1.html',user_info=user_info,abs_id=abs_id,abs_type=abs_type,data=abstract_info,categories=categories,conf_id=conf_id,conf_key=conf_key)
return jsonify(json)
else:
return redirect(url_for('main.AbstractsIndex',abs_type=abs_type))
def Step1post(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = request.values.get('abs_id')
if request.method == "POST":
user_id = request.values["user_id"]
img_count = AbstractModel().get_upload_photo_count(abs_id,confData.get('conf_schema')) #count the presenting author count to check with count from settings
if(img_count["img_count"] > 0):
data = {
'category_id' : request.values.get("section") or None,
'title' : request.values.get("title" or ''),
'synopsis' : request.values.get("synopsis" or ''),
}
cur_step = request.values['cur_step']
if int(cur_step) <= 1:
data["cur_step"] = 1
stepdataupdate = UserModel().update_step(data,abs_id,confData.get('conf_schema'))
abs_id = Cryptography.encrypt(int(abs_id))
return redirect(url_for('main.Step2',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
else:
msg = 'Please upload Ophthalmic Photograph '
json = {'msg':msg,'status' : 0,'data':''}
return jsonify(json)
else:
abs_id = Cryptography.encrypt(int(abs_id))
return redirect(url_for('main.Step1',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
def Upload_image(abs_id,abs_type,conf_id,conf_key):
file = request.files.get("upload_file")
data_1 = {}
# abs_id = Cryptography.decrypt(abs_id)
acl="public-read"
s3 = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
filename = secure_filename(file.filename)
file_str = filename
if " " in file_str :
file_str = file_str.replace(" ","")
else :
pass
try:
bucket = bucketname
foldername = "OPC2023"
file_path = "https://"+bucketname+".s3.ap-southeast-1.amazonaws.com/"+foldername+"/"+str(abs_id)+"/"
data_1 = {
'path' : file_path,
'file_name' : file_str,
}
update_data = AbstractModel().update_imge_db(abs_id,data_1)
data_1["upload_id"] = update_data["max"]
response = s3.upload_fileobj(file, bucket,foldername+'/'+str(abs_id)+'/'+ file_str, ExtraArgs={"ACL": acl,"ContentType": file.content_type})
except ClientError as e:
logging.error(e)
json = {'msg':'Image upload failed.','status' : 0,'data':''}
return jsonify(json)
return jsonify(data_1)
def Delete_Image(abs_type,conf_id,conf_key):
upload_id = request.values.get('upload_id')
img = AbstractModel().get_img_upload(upload_id)
filepath = img['path']
filename = img['file_name']
foldername = filepath+filename
foldername = foldername.replace("https://"+bucketname+".s3.ap-southeast-1.amazonaws.com/", "")
# print(foldername)
s3 = boto3.resource("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='EEudWCsWeCIt/J9/z5m5htmUdGFJNzWFPvNQBIp/')
response = s3.Object(bucketname, foldername).delete()
AbstractModel().delete_image(upload_id)
return jsonify()
def Step2(abs_type,conf_id,conf_key):
json = {'msg':'','status' : 1,'data':''}
abs_id = request.values["abs_id"]
abs_id = unquote(abs_id)
abs_id = int(Cryptography.decrypt(abs_id))
confData = Auth.get_conference(conf_id)
# step2data = UserModel().steps_data(abs_id,confData.get('conf_schema'))#get date from DB
data = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))
if data == [] :
json = {'msg':'Abstract Not Found<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
return jsonify(json)
if(data['abs_status_id'] == 0 ):
enabs_id = Cryptography.encrypt(data['abs_id'])
json["data"] = render_template('users/TNOA24/OPC/step2.html',data=data,abs_type=abs_type,abs_id=enabs_id,conf_id=conf_id,conf_key=conf_key)
return jsonify(json)
else:
json = {'msg':'Abstract already submitted<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
return jsonify(json)
def StepPost_2(abs_type,conf_id,conf_key):
user_id = request.values["user_id"]
abs_id = request.values.get("abs_id")
is_next = request.values.get('is_next')
if (int(is_next) == 1):
return redirect(url_for('main.Step3',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
else:
return redirect(url_for('main.Step1',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
def Searchauthor(abs_type,conf_id,conf_key):
searchtext = request.values["searchtext"]
btn_val = request.values["btn_val"]
society_id = Auth.get_conference(conf_id).get("society_id")
role_id = 34
if int(btn_val) == 0:
setting_key = 'OPC_PA_COUNT'
data1 = AbstractModel().settings(setting_key,conf_id)#get settings for PP presenting author count
if (data1[0]):
data1 = data1=int(data1[0][0]["setting_value"])
mem_type = None
data = UserModel().get_search_data_presenting(mem_type,searchtext,role_id,abs_type,society_id,conf_id)#getting search data from DB to step3
return render_template('users/TNOA24/OPC/presenting_authour_search_table.html',data=data,data1=data1,conf_id=conf_id,conf_key=conf_key)
else:
setting_key = 'OPC_CA_COUNT'
data1 = AbstractModel().settings(setting_key,conf_id)#get settings for PP presenting author count
if (data1[0]):
data1 = data1=int(data1[0][0]["setting_value"])
data = UserModel().get_search_data(searchtext,role_id,abs_type,society_id,conf_id)#getting search data from DB to step3
return render_template('users/TNOA24/OPC/co_authour_search_table.html',data=data,data1=data1,conf_id=conf_id,conf_key=conf_key)
def Co_author(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
user_id = request.values["searchvalue"]
abs_id = request.values["abs_id"]
role_id = request.values["role_id"]
abs_id = int(Cryptography.decrypt(abs_id))
addcoinst = UserModel().get_user_data(user_id)#getting user data
data = AbstractModel().add_to_presenting_author(abs_id,user_id,role_id,confData.get('conf_schema'))#adding presenting author for OPC
return render_template('users/TNOA24/OPC/co_athour_table.html',data2=addcoinst,conf_id=conf_id,conf_key=conf_key)
def Get_co_author(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = request.values["abs_id"]
abs_id = int(Cryptography.decrypt(abs_id))
data = AbstractModel().get_authors(abs_id,confData['conf_schema'])#geting author to show in step 3 table
limit_of_authors = AbstractModel().limit_of_authors(abs_id,confData.get('conf_schema'))#geting count of author for co-authors
settings = AbstractModel().settings(abs_type+"_CA_COUNT",conf_id)
if(limit_of_authors >= int(settings[0][0]["setting_value"])):
limit = 0
else:
limit = 1
# print(data)
return render_template('users/TNOA24/OPC/co_athour_table.html',co_data=data,limit=limit,conf_id=conf_id,conf_key=conf_key)
def Add_update_co_author(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
user_id = request.values["user_id"]
abs_id = request.values["abs_id"]
role_id = request.values["role_id"]
addcoauthor = UserModel().get_user_data(user_id)#getting user data
# print(addcoauthor)
abs_id = (int(Cryptography.decrypt(abs_id)))
saved_to = AbstractModel().add_to_presenting_author(abs_id,user_id,role_id,confData.get('conf_schema'))#adding presenting author for PP
return render_template('users/TNOA24/OPC/co_athour_table.html',co_data=addcoauthor,conf_id=conf_id,conf_key=conf_key)
def Step3getauthor(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = request.values["abs_id"]
abs_id = int(Cryptography.decrypt(abs_id))
data = AbstractModel().get_authors(abs_id,confData['conf_schema'])#geting author to show in step 3 table
limit_of_authors = AbstractModel().limit_of_authors(abs_id,confData.get('conf_schema'))#geting count of author for co-authors
setting = AbstractModel().settings(abs_type+"_CA_COUNT")
if(limit_of_authors >= int(setting[0][0]["setting_value"])):
limit = 0
else:
limit = 1
return render_template('users/TNOA24/OPC/co_athour_table.html',data=data,limit=limit,conf_id=conf_id,conf_key=conf_key)
def Step3deleteauthor(conf_id,conf_key):
confData = Auth.get_conference(conf_id)
topic_id = request.values["topic_id"]
data = AbstractModel().delete_author_userid(topic_id,confData.get('conf_schema'))#deleting the author
return jsonify()
def Step3(abs_type,conf_id,conf_key):
json = {'msg':'','status' : 1,'data':''}
abs_id = request.values["abs_id"]
abs_id = unquote(abs_id)
abs_id = int(Cryptography.decrypt(abs_id))
confData = Auth.get_conference(conf_id)
check_authors_count = AbstractModel().check_authors_count(abs_id,36,confData.get('conf_schema'))#this is used for step3 co-author count for OPC AND FP
if check_authors_count == [] :
json = {'msg':'Abstract Not Found<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
return jsonify(json)
if(check_authors_count["abs_status_id"] == 0 ):
# if(check_authors_count["authors_count"] > 0 ):
data = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))#getting user and abstract data
data1 = AbstractModel().get_authors(abs_id,confData['conf_schema'])#geting co authors
data2 = AbstractModel().FP_step1_get_author(abs_id,confData.get('conf_schema'))#getting presenting author
abs_id = Cryptography.encrypt(int(abs_id))
json["data"] = render_template('users/TNOA24/OPC/step3.html',abs_type=abs_type,abs_id=abs_id,data=data,data2=data2,data1=data1,conf_id=conf_id,conf_key=conf_key)
return jsonify(json)
# else:
# msg = ('Enter at least one author')
# json = {'msg':msg,'status' : 0,'data':''}
# return jsonify(json)
else:
json = {'msg':'Abstract already submitted<a href="'+ request.host_url + url_for('DB.Dashboard',conf_id=conf_id,conf_key=conf_key) +'"> click here to Home Page</a>','status' : 0,'data':''}
return jsonify(json)
def Mail(abs_id,conf_id,conf_key):
conf_data = Auth.get_conference(conf_id)
society_id = conf_data["society_id"]
user_id = Auth.get_user(society_id).get('user_id')
abs_id = unquote(abs_id)
abs_id = int(Cryptography.decrypt(abs_id))
data = AbstractModel().get_sept4_data(abs_id,conf_data.get('conf_schema'))
authors = AbstractModel().get_authors(abs_id,conf_data['conf_schema'])
is_next = request.values.get('is_next')
if (int(is_next) == 1):
if(data["status_check"] == 0):
now = datetime.now()
data1 = {
'submitted_at' : str(datetime.now()),
}
PA_count = AbstractModel().get_FP_PA_count_final(abs_id,data["abs_type"],conf_data.get('conf_schema'))#checking presenting author count
presenting_author = AbstractModel().FP_step1_get_author(abs_id,conf_data.get('conf_schema'))#getting presenting author details
authors_email = AbstractModel().fp_authors_for_email(abs_id,conf_data.get('conf_schema'))#getting co authors details
settings = AbstractModel().settings('OPC_PA_COUNT',conf_id)
# confe_logo = Auth.get_conference().get('conference_header_logo')
output = AbstractModel().abstract_submited(user_id,abs_id,data["abs_type"],data1,conf_id)
data = AbstractModel().get_sept4_data(abs_id,conf_data.get('conf_schema'))
# print(data)
for i in authors_email:
template_name = 'OPC_submit_mail'
mailData = UserModel().get_mail_templates(template_name,conf_id)
sub_data = {'abs_type':data['abs_type'],'abs_no':str(data['abs_no']),'conf_name': conf_data['conf_name']}
subject = Helper.merge_tags(mailData.subject,sub_data)
email = i["email"]
# print(email)
mail_data = {'mail_content': mailData.mail_content,'data': data,'confData':conf_data}
mail_content = Helper.convert_html_for_mail_screen(mail_data)
html = render_template('users/email/mail_template.html',is_layout=mailData.is_layout,mail_content=mail_content,confData=conf_data)
EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
# name = i["full_name"]
# subject = "TNOA24 2023-"+data["abs_type"]+str(data["abs_no"])+" successfully submited"
# email = i["email"]
# html = render_template('users/email/OPC_submit.html',name=name,confe_logo=confe_logo,data=data,data1=authors,data2=presenting_author,conf_id=conf_id,conf_key=conf_key)
# now = datetime.now()
# EMAIL.sendMail(subject,html,email)
# return html
if output == "success":
abs_id = Cryptography.encrypt(int(abs_id))
user_id = Cryptography.encrypt(int(user_id))
return redirect(url_for('main.success',abs_type=data["abs_type"],abs_id=abs_id,user_id=user_id,conf_id=conf_id,conf_key=conf_key))
else:
flash('This '+data["abs_type"]+''+str(data["abs_no"])+' is already submitted')
return redirect(url_for('main.AbstractsIndex',abs_type=data["abs_type"],conf_id=conf_id,conf_key=conf_key))
else:
abs_id = Cryptography.encrypt(int(abs_id))
return redirect(url_for('main.Step1',abs_id=abs_id,abs_type=data['abs_type'],conf_id=conf_id,conf_key=conf_key))
def success(abs_type,abs_id,user_id,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = unquote(abs_id)
user_id = unquote(user_id)
abs_id = int(Cryptography.decrypt(abs_id))
user_id = int(Cryptography.decrypt(user_id))
authors = AbstractModel().get_authors(abs_id,confData['conf_schema'])
data = AbstractModel().get_abstracts_by_user_abs_id(user_id,abs_id,confData['conf_schema'])
alert_class = "alert-success"
alert_image = "/static/images/wrong.png"
alert_message = "Congratulations! your "+ data["abs_type"] + str(data["abs_no"]) +" is submitted successfully "
return render_template('users/TNOA24/OPC/error_sucess.html',alert_class=alert_class,alert_message=alert_message,abs_id=abs_id,data=data,data2=authors,alert_image=alert_image,conf_id=conf_id,conf_key=conf_key)
def View(abs_id,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = unquote(abs_id)
abs_id = Cryptography.decrypt(abs_id)
data = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))
data1 = AbstractModel().get_authors(abs_id,confData['conf_schema'])
data2 = AbstractModel().FP_step1_get_author(abs_id,confData.get('conf_schema'))
return render_template('users/TNOA24/OPC/view.html',abs_id=abs_id,data=data,data2=data2,data1=data1,conf_id=conf_id,conf_key=conf_key)
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists