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
import datetime
# from .. import Cryptography,Auth,RouteGroup
from core.library.email import EMAIL
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
from datetime import timedelta,date,datetime
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
#name : Mukesh kumar
#version : 1
#title: abstract submission
#date:07/02/2022 01:14
class OPController():
def GuidelineIndex(self,abs_type,conf_id,conf_key):
guideline = UserModel().get_guidelines(abs_type)
return render_template('users/IAGES/guideline.html',guideline=guideline,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key)
def AbstractsIndex(abs_type,conf_id,conf_key):
# print("OPController")
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)
validation = AbstractModel().abstract_home_validation('OP',user_id,conf_id)
my_abstracts = data[0]
eng_abstracts = data[1]
if(validation["status"] != 1):
flash(validation["msg"])
return render_template('users/TNASI24/OP/abstract.html',data=my_abstracts,abs_type='OP',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)
# print(abs_id)
return render_template('users/TNASI24/OP/main_OP.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 = Auth.get_conference(conf_id).get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
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
def Step1(abs_type,conf_id,conf_key):
json = {'msg':'','status' : 1,'data':''}
abs_id = int(Cryptography.decrypt(unquote(request.values.get('abs_id'))))
# print("abs_id in step 1",abs_id)
confData = Auth.get_conference(conf_id)
society_id = Auth.get_conference(conf_id).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)
award = AbstractModel().get_abs_award(conf_id,abs_type)
if(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):
type_of_presentation = AbstractModel().get_usp_type_of_presentation(user_id,conf_id)#getting presenting type from DB for PP
abs_id = Cryptography.encrypt(abs_id)
# print("in if of step 1 abs_id",abs_id)
guideline = UserModel().get_guidelines(abs_type,conf_id)
json['data'] = render_template('users/TNASI24/OP/step1.html',guideline=guideline,user_info=user_info,award=award,abs_id=abs_id,abs_type=abs_type,data=abstract_info,type_of_presentation=type_of_presentation,categories=categories,conf_id=conf_id,conf_key=conf_key,society_id=society_id)
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)
else:
return redirect(url_for('main.AbstractsIndex',abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
def Step1post(abs_type,conf_id,conf_key):
json = {'msg':'','status' : 0,'data':''}
confData = Auth.get_conference(conf_id)
pa_user_id= request.values.get('pa_user_id')
abs_id = request.values.get('abs_id')
# print(abs_type)
abs_id = int(Cryptography.decrypt(abs_id))
if pa_user_id and int(pa_user_id) > 0:
PA_count = AbstractModel().get_FP_PA_count(pa_user_id,abs_id,abs_type,confData.get('conf_schema')) #count the presenting author count to check with count from settings
settings = AbstractModel().settings(abs_type,conf_id) #taking count form settings table to check the count of presenting author
if(PA_count < int(settings[0][0]["setting_value"])):
data = {
'category_id' :request.values.get("cat_type"),
'award_id' : request.values.get("award_id")
}
cur_step = request.values['cur_step']
if int(cur_step) <= 1:
data["cur_step"] = 1
step1update = UserModel().update_step(data,abs_id,confData.get('conf_schema'))#updataing the data for step1
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:
flash('The presenting author can not participate more than '+settings[0][0]["setting_value"])
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))
else:
json['msg'] = 'please select presenting author'
json['status'] = 0
return jsonify(json)
def Step2(abs_type,conf_id,conf_key):
json = {'msg':'','status' : 1,'data':''}
abs_id = request.values.get('abs_id')
# print("abs_id in step 2",abs_id)
# print("type of abs_id",type(abs_id))
abs_id = int(Cryptography.decrypt(abs_id))
# print("decryted abs_id in step2",abs_id)
confData = Auth.get_conference(conf_id)
step2data = UserModel().steps_data(abs_id,confData.get('conf_schema'))#get date from DB
# step2data = UserModel().steps_2_data(abs_id)#get date from DB
if step2data == [] :
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(step2data['abs_status_id'] == 0 ):
abs_id = Cryptography.encrypt(abs_id)
json["data"] = render_template('users/TNASI24/OP/step2.html',data=step2data,abs_id=abs_id,abs_type=abs_type,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):
confData = Auth.get_conference(conf_id)
abs_id = request.values["abs_id"]
user_id = request.values["user_id"]
is_next = request.values.get('is_next')
if (int(is_next) == 1):
abs_id = int(Cryptography.decrypt(abs_id))
data = {
'title' : request.values.get("title" or ''),
'synopsis' : request.values.get("synopsis" or ''),
'methods' : request.values.get("methods" or ''),
'results' : request.values.get("results" or ''),
'updated_at' : datetime.now()
}
cur_step = request.values['cur_step']
# print("cur_step",cur_step)
if int(cur_step) <= 2:
data["cur_step"] = 2
step2data = UserModel().update_step(data,abs_id,confData.get('conf_schema'))#updating data to DB
abs_id = Cryptography.encrypt(int(abs_id))
# print("encrypted abs_id",abs_id)
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 Step3(abs_type,conf_id,conf_key):
json = {'msg':'','status' : 1,'data':''}
confData = Auth.get_conference(conf_id)
abs_id = request.values.get('abs_id')
abs_id = int(Cryptography.decrypt(abs_id))
step2data = UserModel().steps_data(abs_id,confData.get('conf_schema'))#get date from DB
if step2data == [] :
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(step2data['abs_status_id'] == 0 ):
decry_abs_id = abs_id
abs_id = Cryptography.encrypt(int(abs_id))
json["data"] = render_template('users/TNASI24/OP/step3.html',data = step2data,abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key,decry_abs_id=decry_abs_id)
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 Step3post(abs_id,abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = unquote(abs_id)
abs_id1 = int(Cryptography.decrypt(abs_id))
is_next = request.values.get('is_next')
if (int(is_next) == 1):
data = {
'is_award':request.values.get("rdnaward" or '')
}
cur_step = request.values['cur_step']
if int(cur_step) <= 3:
data["cur_step"] = 3
step3data=UserModel().update_step(data,abs_id1,confData.get('conf_schema'))
# confe_id = Auth.get_conference(conf_id).get("society_id")
# return redirect(url_for('OP.Step4',abs_id = abs_id,abs_type=abs_type))
return redirect(url_for('main.Step4',abs_id = abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))# changed to step 4 because tnoa does not contain this steps
else:
return redirect(url_for('main.Step2',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"]
conf_id = request.values["conf_id"]
society_id = Auth.get_conference(conf_id).get("society_id")
role_id = 35
if int(btn_val) == 0:
setting_key = 'OP_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,role_id,searchtext,abs_type,society_id,conf_id)#getting search data from DB to step3
html = render_template('users/TNASI24/OP/presenting_authour_search_table.html',data=data,data1=data1)
return jsonify(html)
else:
setting_key = 'OP_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
html = render_template('users/TNASI24/OP/co_authour_search_table.html',data=data,data1=data1)
return jsonify(html)
def Add_update_Presenting_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"]
add_PA = 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 PP
user_info = UserModel().get_users_member_no(user_id)
html = render_template('users/TNASI24/OP/presenting_authour_table.html',pa_data=add_PA,user_info=user_info)
return jsonify(html)
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
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
html = render_template('users/TNASI24/OP/co_athour_table.html',co_data=addcoauthor)
return jsonify(html)
def Step1_get_author(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = request.values["abs_id"]
data = AbstractModel().FP_step1_get_author(abs_id,confData.get('conf_schema'))#getting the presenting author to show in step1
if(data == []):
data1 = 0
return jsonify(data1)
society_id = Auth.get_conference(conf_id).get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
user_info = UserModel().get_users_member_no(user_id)
html = render_template('users/TNASI24/OP/presenting_authour_table.html',pa_data=data,user_info=user_info)
return jsonify(html)
def Get_co_author(abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
conf_id = request.values["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
html = render_template('users/TNASI24/OP/co_athour_table.html',co_data=data,limit=limit)
return jsonify(html)
def Step4(abs_id,abs_type,conf_id,conf_key):
json = {'msg':'','status' : 1,'data':''}
abs_id = unquote(abs_id)
abs_id = int(Cryptography.decrypt(abs_id))
confData = Auth.get_conference(conf_id)
stepsdata = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))#getting user and abstract data
check_authors_count = AbstractModel().check_authors_count(abs_id,36,confData.get('conf_schema'))#this is used for step3 co-author count for VT AND PP
if stepsdata == [] :
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(stepsdata["abs_status_id"] == 0 ):
if(check_authors_count["authors_count"] >= 0 ):
uploaded_data = AbstractModel().get_img_upload_by_abs_id(abs_id)
abs_id = Cryptography.encrypt(int(abs_id))
# return redirect(url_for('OP.Step5',abs_id=abs_id,abs_type=abs_type))
json["data"] = render_template('users/TNASI24/OP/step4.html',abs_type=abs_type,abs_id=abs_id,data=stepsdata,conf_id=conf_id,conf_key=conf_key,uploaded_data=uploaded_data)
return jsonify(json) # this is commented by mukesh tnoa has only 4 steps and skipped the 4 step
else:
json["msg"] = 'Enter at least one author'
json["status"] = 0
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 Step4post(abs_id,abs_type,conf_id,conf_key):
confData = Auth.get_conference(conf_id)
abs_id = unquote(abs_id)
abs_id = int(Cryptography.decrypt(abs_id))
is_next = request.values.get('is_next')
img = AbstractModel().get_img_upload_count(abs_id)
if img :
if (int(is_next) == 1):
misc1 = request.values["misc1"]
data={
'misc1':misc1,
}
cur_step = request.values['cur_step']
if int(cur_step) <= 4:
data["cur_step"] = 4
datatoupdate=UserModel().update_step(data,abs_id,confData.get('conf_schema'))#update data from step 4 for Fp
abs_id = Cryptography.encrypt(int(abs_id))
return redirect(url_for('main.Step5',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
else:
abs_id = Cryptography.encrypt(int(abs_id))
return redirect(url_for('main.Step3',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
else:
json = {'msg':'Please upload your presentation','status' : 0,'data':''}
return jsonify(json)
def Step5(abs_id,abs_type,conf_id,conf_key):
json = {'msg':'','status' : 1,'data':''}
abs_id = unquote(abs_id)
abs_id = int(Cryptography.decrypt(abs_id))
confData = Auth.get_conference(conf_id)
data = AbstractModel().get_sept4_data(abs_id,confData.get('conf_schema'))#getting user and abstract data
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)
elif(data["abs_status_id"] == 0 ):
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/TNASI24/OP/step5.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:
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 = Auth.get_conference(conf_id).get("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):
data1 = {
'submitted_at' : str(datetime.now()),
}
# ratifi_authour = UserModel().get_ratified_member_count(abs_id,confdata.get('conf_schema'))
ratifi_authour = 1
if int(ratifi_authour) >= 1:
PA_count = AbstractModel().get_FP_PA_count_final(abs_id,data["abs_type"],conf_data.get('conf_schema'))#checking presenting author count
data2 = AbstractModel().FP_step1_get_author(abs_id,conf_data.get('conf_schema'))#getting presenting author details
data3 = AbstractModel().fp_authors_for_email(abs_id,conf_data.get('conf_schema'))#getting co authors details
settings = AbstractModel().settings('OP_PA_COUNT',conf_id)
if(PA_count <= int(settings[0][0]["setting_value"])):
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'))
confe_logo = conf_data['mail_header_logo']
for i in data3:
template_name = 'OP_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"]
mail_data = {'mail_content': mailData.mail_content,'data': data,'data1':authors,'confData':conf_data,'data2':data2}
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,conf_id=conf_id,conf_key=conf_key)
# name = i["full_name"]
# subject = "Oral Presentation Abstract "+data["abs_type"]+str(data["abs_no"])+" submitted successfully - "+conf_data['conf_name']
# email = i["email"]
# html = render_template('users/email/OP_submit.html',name=name,data=data,data1=authors,data2=data2,confe_logo = confe_logo,conf_id=conf_id)
# now = datetime.now()
# EMAIL.sendMail(subject,html,email,conf_id)
EMAIL.sendMail_v1(subject,html,email,mailData,conf_id)
# return(html)
else:
abs_id = Cryptography.encrypt(int(abs_id))
flash('The presenting author can not participate more than '+settings[0][0]["setting_value"])
return redirect(url_for('main.AbstractsIndex',abs_type=data["abs_type"],conf_id=conf_id,conf_key=conf_key))
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("There must be one Ratified Member as Author(Presenting Author or Co-Author)")
return redirect(url_for('main.AbstractsIndex',abs_type=data['abs_type'],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.Step4',abs_id=abs_id,abs_type=data['abs_type'],conf_id=conf_id,conf_key=conf_key))#skiped one step for tnoa
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/TNASI24/OP/error_success.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 = int(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/TNASI24/OP/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