Sindbad~EG File Manager

Current Path : /home/numerotech/test-abs.numerotech.com/common_abs_v2/core/controller/
Upload File :
Current File : //home/numerotech/test-abs.numerotech.com/common_abs_v2/core/controller/IAGES_EPController.py

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 .. import Cryptography,Auth,RouteGroup
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

app = Blueprint('EP', __name__)
	
@app.route('/guideline_index/<abs_type>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
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)


@app.route('/abstract_index/<abs_type>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
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)

@app.route('/<abs_id>/<string:abs_type>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
@RouteGroup.validation_EP_required
def main_layout(abs_type,abs_id,conf_id,conf_key):
	# abs_id   = Cryptography.decrypt(abs_id)
	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)

@app.route('/new/<string:abs_type>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
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")
	validation   = AbstractModel().abstract_home_validation(abs_type,user_id,confe_id)
	if validation["status"] == 1:
		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 redirect(url_for('EP.main_layout',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
	else:
		return redirect(url_for('EP.AbstractsIndex',abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))

@app.route('/step1/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
@RouteGroup.validation_EP_required
def Step1(conf_id,conf_key):
	json        = {'msg':'','status' : 1,'data':''}
	abs_id      =   int(Cryptography.decrypt(unquote(request.values.get('abs_id'))))
	abs_type    =   request.values.get('abs_type')
	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('EP.AbstractsIndex',abs_type=abs_type))

@app.route('/step1post/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def Step1post(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_type  = request.values.get("abs_type")
	abs_id    = int(Cryptography.decrypt(abs_id))
	
	if request.method == "POST":
		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('EP.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('EP.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)
	else:
		abs_id = Cryptography.encrypt(int(abs_id))
		return redirect(url_for('EP.Step1',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))

@app.route('/step2/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
@RouteGroup.validation_EP_required
def Step2(conf_id,conf_key):
	json = {'msg':'','status' : 1,'data':''}

	abs_id     = request.values.get('abs_id')
	abs_type   = request.values.get('abs_type')
	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)

@app.route('/step2post/<string:abs_type>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def StepPost_2(abs_type,conf_id,conf_key):
	if request.method == "POST":
		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('EP.Step3',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
		else:
			return redirect(url_for('EP.Step1',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
	else:
		return None

@app.route('/step3/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
@RouteGroup.validation_EP_required
def Step3(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_type   = request.values.get('abs_type')
	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)

@app.route('/step3post/<abs_id>/<abs_type>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
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('EP.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('EP.Step2',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))


@app.route('/searchauthor/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def Searchauthor(conf_id,conf_key):
	searchtext  = request.values["searchtext"]
	abs_type    = request.values["abs_type"]
	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,role_id,searchtext,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:
		if abs_type == 'PT':
			setting_key = 'PT_CA_COUNT'
		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)
	

@app.route('/add_presenting_author/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def Add_update_Presenting_author(conf_id,conf_key):
	user_id   = request.values["user_id"]
	abs_type  = request.values["abs_type"]
	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)

@app.route('/add_co_author/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def Add_update_co_author(conf_id,conf_key):
	user_id     = request.values["user_id"]
	abs_type    = request.values["abs_type"]
	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)


@app.route('/ppstep1getauthor/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def Step1_get_author(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)

@app.route('/get_co_author/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def Get_co_author(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_type    =  request.values["abs_type"]
	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)
	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)

@app.route('/step3deleteauthor/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def Step3deleteauthor(conf_id,conf_key):
	topic_id  = request.values["topic_id"]
	data       = AbstractModel().delete_author_userid(topic_id)#deleting the author
	return jsonify()

@app.route('/step4/<abs_id>/<string:abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
@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)

@app.route('/step4post/<abs_id>/<string:abs_type>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
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('EP.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('EP.Step3',abs_id=abs_id,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key))
	
@app.route('/step5/<abs_id>/<string:abs_type>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
@RouteGroup.validation_EP_required
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)

@app.route('/mail/<abs_id>/<conf_id>/<conf_key>', methods = ["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
@RouteGroup.validation_EP_required
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('EP.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('EP.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('EP.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('EP.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('EP.Step4',abs_id=abs_id,abs_type=data['abs_type'],conf_id=conf_id,conf_key=conf_key))#skiped one step for tnoa

		
@app.route('/success/<string:abs_type>/<abs_id>/<user_id>/<conf_id>/<conf_key>',methods = ["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required
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)


@app.route('/view/<abs_id>/<conf_id>/<conf_key>',methods=["GET","POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
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)


@app.route('/img_upload/<abs_id>/<abs_type>/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def Img_upload(abs_id,abs_type,conf_id,conf_key):
	file = request.files.get('file')
	bucketname = Auth.get_society_data(conf_id).get('aws_bucket')
	if file and bucketname:
		img             = AbstractModel().get_img_upload(abs_id)
		if img:
			img             = img[0]   
			filepath        = img['path']
			filename        = img['file_name']
			foldername      = filepath+filename
			foldername      = foldername.replace("https://"+bucketname+".s3-ap-southeast-1.amazonaws.com/", "")
			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(abs_id)
		else:
			pass
		data_1 = {}
		acl="public-read"
		s3 = boto3.client("s3",aws_access_key_id='AKIAILLDAQ7NFUMVOYLQ',aws_secret_access_key='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')
		filename = secure_filename(file.filename)
		file_str = filename
		try:
		    bucket     = bucketname
		    foldername = "test"
		    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)
		    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)
	return jsonify(data_1)

@app.route('/remove_img/<conf_id>/<conf_key>', methods = ["GET", "POST"])
@RouteGroup.conf_required
@RouteGroup.login_required 
def Remove_img(conf_id,conf_key):
	abs_id  = request.values.get('abs_id')  
	conf_id = request.values.get('conf_id')
	img     = AbstractModel().get_img_upload(abs_id)
	if img:
		bucketname = Auth.get_society_data(conf_id).get('aws_bucket')
		img        = img[0]   
		filepath   = img['path']
		filename   = img['file_name']
		foldername = filepath+filename
		foldername = foldername.replace("https://"+bucketname+".s3-ap-southeast-1.amazonaws.com/", "")
		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(abs_id)
	else:
		pass
	return jsonify('success')

		

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists