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 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 : 4.5
#title: abstract submission
#date:19/01/2023 01:14
class EPController():
def GuidelineIndex(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):
society_id = Auth.get_conference(conf_id).get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
confe_id = Auth.get_conference(conf_id).get('conf_id')
data = UserModel().get_abstract_home(user_id,abs_type,confe_id)
validation = AbstractModel().abstract_home_validation('EP',user_id,confe_id)
my_abstracts = data[0]
eng_abstracts = data[1]
if(validation["status"] != 1):
flash(validation["msg"])
return render_template('users/IAGES/EP/abstract.html',data=my_abstracts,abs_type='EP',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):
return render_template('users/IAGES/EP/main_EP.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):
society_id = Auth.get_conference(conf_id).get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
confe_id = Auth.get_conference(conf_id).get("conf_id")
created_at = datetime.now()
result = UserModel().new_abs(user_id,abs_type,34,created_at,confe_id)
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'))))
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)
if(abs_id > 0):
abstract_info = AbstractModel().get_abstracts_by_user_abs_id(user_id,abs_id)#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)
json['data'] = render_template('users/IAGES/EP/step1.html',user_info=user_info,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)
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))
def Step1post(abs_type,conf_id,conf_key):
json = {'msg':'','status' : 0,'data':''}
society_id = Auth.get_conference(conf_id).get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
pa_user_id= request.values.get('pa_user_id')
abs_id = request.values.get('abs_id')
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) #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["cat_type"]
}
step1update = UserModel().update_step(data,abs_id)#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')
abs_id = int(Cryptography.decrypt(abs_id))
society_id = Auth.get_conference(conf_id).get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
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/IAGES/EP/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):
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()
}
step2data = UserModel().update_step(data,abs_id)#updating data to DB
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:
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':''}
society_id = Auth.get_conference(conf_id).get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
abs_id = request.values.get('abs_id')
abs_id = int(Cryptography.decrypt(abs_id))
step2data = UserModel().steps_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 ):
decry_abs_id = abs_id
abs_id = Cryptography.encrypt(int(abs_id))
json["data"] = render_template('users/IAGES/EP/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):
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 '')
}
step3data=UserModel().update_step(data,abs_id1)
confe_id = Auth.get_conference(conf_id).get("society_id")
# return redirect(url_for('EP.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 = 'PP_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)#getting search data from DB to step3
html = render_template('users/IAGES/EP/presenting_authour_search_table.html',data=data,data1=data1)
return jsonify(html)
else:
setting_key = 'PP_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)#getting search data from DB to step3
html = render_template('users/IAGES/EP/co_authour_search_table.html',data=data,data1=data1)
return jsonify(html)
def Add_update_Presenting_author(abs_type,conf_id,conf_key):
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)#adding presenting author for PP
html = render_template('users/IAGES/EP/presenting_authour_table.html',pa_data=add_PA)
return jsonify(html)
def Add_update_co_author(abs_type,conf_id,conf_key):
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)#adding presenting author for PP
html = render_template('users/IAGES/EP/co_athour_table.html',co_data=addcoauthor)
return jsonify(html)
def Step1_get_author(abs_type,conf_id,conf_key):
abs_id = request.values["abs_id"]
data = AbstractModel().FP_step1_get_author(abs_id)#getting the presenting author to show in step1
if(data == []):
data1 = 0
return jsonify(data1)
html = render_template('users/IAGES/EP/presenting_authour_table.html',pa_data=data)
return jsonify(html)
def Get_co_author(abs_type,conf_id,conf_key):
conf_id = request.values["conf_id"]
confe_name = Auth.get_conference(conf_id).get('conf_name')
duration_db = AbstractModel().settings(confe_name+"_Duration",conf_id)
abs_id = request.values["abs_id"]
abs_id = int(Cryptography.decrypt(abs_id))
data = AbstractModel().get_authors(abs_id)#geting author to show in step 3 table
limit_of_authors = AbstractModel().limit_of_authors(abs_id)#geting count of author for co-authors
settings = AbstractModel().settings(abs_type+"_CA_COUNT",conf_id)
print(limit_of_authors)
if(limit_of_authors >= int(settings[0][0]["setting_value"])):
limit = 0
else:
limit = 1
html = render_template('users/IAGES/EP/co_athour_table.html',co_data=data,limit=limit)
return jsonify(html)
@RouteGroup.validation_EP_required
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))
society_id = Auth.get_conference(conf_id).get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
stepsdata = AbstractModel().get_sept4_data(abs_id)#getting user and abstract data
check_authors_count = AbstractModel().check_authors_count(abs_id,36)#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 ):
stepsdata = AbstractModel().get_sept4_data(abs_id)#getting user and abstract data
abs_id = Cryptography.encrypt(int(abs_id))
# return redirect(url_for('EP.Step5',abs_id=abs_id,abs_type=abs_type))
json["data"] = render_template('users/IAGES/EP/step4.html',abs_type=abs_type,abs_id=abs_id,data=stepsdata,conf_id=conf_id,conf_key=conf_key)
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):
abs_id = unquote(abs_id)
abs_id = int(Cryptography.decrypt(abs_id))
is_next = request.values.get('is_next')
if (int(is_next) == 1):
misc1 = request.values["misc1"]
data={
'misc1':misc1,
}
datatoupdate=UserModel().update_step(data,abs_id)#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))
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))
society_id = Auth.get_conference(conf_id).get("society_id")
user_id = Auth.get_user(society_id).get('user_id')
data = AbstractModel().get_sept4_data(abs_id)#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)#geting co authors
data2 = AbstractModel().FP_step1_get_author(abs_id)#getting presenting author
abs_id = Cryptography.encrypt(int(abs_id))
json["data"] = render_template('users/IAGES/EP/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):
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) # db call 1
authors = AbstractModel().get_authors(abs_id) # db call 2
is_next = request.values.get('is_next')
conf_data = Auth.get_conference(conf_id)
conf_id = conf_data['conf_id']
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)
ratifi_authour = 1
if int(ratifi_authour) >= 1:
PA_count = AbstractModel().get_FP_PA_count_final(abs_id,data["abs_type"])#checking presenting author count
data2 = AbstractModel().FP_step1_get_author(abs_id)#getting presenting author details
data3 = AbstractModel().fp_authors_for_email(abs_id)#getting co authors details
settings = AbstractModel().settings('PP_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)
confe_logo = conf_data['mail_header_logo']
for i in data3:
name = i["full_name"]
subject = "E-Poster Presentation Abstract "+data["abs_type"]+str(data["abs_no"])+" submitted successfully - "+conf_data['conf_name']
email = i["email"]
html = render_template('users/email/EP_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)
# 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):
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)
data = AbstractModel().get_abstracts_by_user_abs_id(user_id,abs_id)
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/IAGES/EP/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):
abs_id = unquote(abs_id)
abs_id = int(Cryptography.decrypt(abs_id))
data = AbstractModel().get_sept4_data(abs_id)
data1 = AbstractModel().get_authors(abs_id)
data2 = AbstractModel().FP_step1_get_author(abs_id)
return render_template('users/IAGES/EP/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