Sindbad~EG File Manager

Current Path : /home/numerotech/test-abs.numerotech.com/common_abs_v2/core/controller/SZTNAOI23/
Upload File :
Current File : //home/numerotech/test-abs.numerotech.com/common_abs_v2/core/controller/SZTNAOI23/QController.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 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 QController:
	
	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)
		member_of_state = Auth.get_user(society_id).get('member_of_state')
		if member_of_state:
			if int(member_of_state) == 35:
				if(validation["status"] != 1):
					flash(validation["msg"])
				return render_template('users/SZTNAOI23/Q/abstract.html',data=my_abstracts,abs_type=abs_type,data1=eng_abstracts,data2 = validation,lent=len(my_abstracts),conf_id=conf_id,conf_key=conf_key,type=type,int=int)
			else:
				flash('Only Member of tamil nadu AOI can submit the abstract ')
				validation["status"] = 2
				return render_template('users/SZTNAOI23/Q/abstract.html',data=my_abstracts,abs_type=abs_type,data1=eng_abstracts,data2 = validation,lent=len(my_abstracts),conf_id=conf_id,conf_key=conf_key,type=type,int=int)
		else:
			flash('Only Member of south zone AOI can submit the abstract ')
			validation["status"] = 2
			return render_template('users/SZTNAOI23/Q/abstract.html',data=my_abstracts,abs_type=abs_type,data1=eng_abstracts,data2 = validation,lent=len(my_abstracts),conf_id=conf_id,conf_key=conf_key,type=type,int=int)

	def main_layout(abs_type,abs_id,conf_id,conf_key):
		# abs_id   = Cryptography.decrypt(abs_id)
		# print(abs_id)
		return render_template('users/SZTNAOI23/Q/main_Q.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')
		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)
			# print(result)
			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")
		json = {'msg':'','status' : 1,'data':''}
		abs_id      = int(Cryptography.decrypt(unquote(request.values.get('abs_id'))))
		# abs_id        = 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
		if(int(abs_id) > 0):
			abstract_info = AbstractModel().get_abstracts_by_user_abs_id(user_id,abs_id)#getting abstract info from abstract table
			# print(abstract_info)
			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/SZTNAOI23/Q/step1.html',user_info=user_info,abs_id=abs_id,abs_type=abs_type,data=abstract_info,conf_id=conf_id,conf_key=conf_key)
				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):
		abs_id    = request.values.get('abs_id')
		# abs_id    = int(Cryptography.decrypt(abs_id))   
		if request.method == "POST":
			society_id  = Auth.get_conference(conf_id).get("society_id")
			user_id     = Auth.get_user(society_id).get('user_id')
			data = {
							'misc1'  : request.values.get("city" or ''),
							'title'  : request.values.get("title" or ''),
							'misc2'  : request.values.get("state" or ''),
							}
					# print(data)
			cur_step = request.values.get('cur_step') or 0

			if int(cur_step) <= 1:
				data["cur_step"] = 1
			stepdataupdate = UserModel().update_step(data,abs_id)
			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:
			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))
		#     img_count    = AbstractModel().get_upload_photo_count(abs_id) #count the presenting author count to check with count from settings
		#     if(img_count["img_count"] > 0):
		#         if (img_count["team_count"] > 0 ):
		#             data = {
		#                     'misc1'  : request.values.get("city" or ''),
		#                     'title'  : request.values.get("title" or ''),
		#                     'misc2'  : request.values.get("state" or ''),
		#                     }
		#             # print(data)
		#             cur_step = request.values.get('cur_step') or 0

		#             if int(cur_step) <= 1:
		#                 data["cur_step"] = 1
		#             stepdataupdate = UserModel().update_step(data,abs_id)
		#             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 select your team mate '
		#             json = {'msg':msg,'status' : 0,'data':''}
		#             return jsonify(json)
		#     else:
		#         msg = 'Please upload Authorisation letter from the HOD '
		#         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='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')
	#     filename = secure_filename(file.filename)
	#     file_str = filename
	#     if " " in file_str :
	#         file_str  = file_str.replace(" ","")
	#     else :
	#         pass

	#     try:
	#         bucket     = bucketname
	#         foldername = "Quiz2023"
	#         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/", "")
	#     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 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     = 35
	#     if(abs_type == "Q" and btn_val == "1"):   
	#         print("============")
	#         consent_count = 'Q_PA_COUNT'
	#         data        = UserModel().get_search_data_presenting('1,2',role_id,searchtext,abs_type,society_id)#getting search data from DB to step3 
	#         data1   = AbstractModel().settings(consent_count,conf_id)#get settings for FP presenting author count
	#         return render_template('users/SZTNAOI23/Q/presenting_authour_search_table.html',data=data,conf_id=conf_id,conf_key=conf_key)
	#     else:
	#         data        = UserModel().get_search_data(searchtext,role_id,abs_type,society_id)
	#         print("data",data)
	#         return render_template('users/SZTNAOI23/Q/co_authour_search_table.html',data=data,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 = 'Q_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
			return render_template('users/SZTNAOI23/PP/presenting_authour_search_table.html',data=data,data1=data1,conf_id=conf_id,conf_key=conf_key)
		else:
			setting_key = 'Q_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"])
			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
			# print(data)
			return render_template('users/SZTNAOI23/PP/co_authour_search_table.html',data=data,data1=data1,conf_id=conf_id,conf_key=conf_key)

	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
		# print("saved_to",saved_to)
		return render_template('users/SZTNAOI23/Q/co_athour_table.html',co_data=addcoauthor,conf_id=conf_id,conf_key=conf_key)


	def Add_update_Presenting_author(abs_type,conf_id,conf_key):
		user_id   = request.values["user_id"]
		abs_id    = request.values["abs_id"]
		# abs_id    = int(Cryptography.decrypt(abs_id))
		role_id   = request.values["role_id"]
		data      = AbstractModel().add_to_teammate(abs_id,user_id,role_id)#adding presenting author for PP
		add_PA      = AbstractModel().q_step1_get_author(abs_id)
		return render_template('users/SZTNAOI23/Q/presenting_authour_table.html',pa_data=add_PA,conf_id=conf_id,conf_key=conf_key)

	def Step1_get_author(abs_type,conf_id,conf_key):
		abs_id    = request.values["abs_id"]
		# abs_id    = int(Cryptography.decrypt(abs_id))
		data      = AbstractModel().q_step1_get_author(abs_id)#getting the presenting author to show in step1
		if(data == []):
			data1 = 0
			return jsonify(data1)
		return render_template('users/SZTNAOI23/Q/presenting_authour_table.html',data=data,abs_type=abs_type,conf_id=conf_id,conf_key=conf_key)

	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')
		data          = AbstractModel().get_sept4_data(abs_id)#getting user and abstract data
		data1     = AbstractModel().get_authors(abs_id)#geting co authors
		data2     = AbstractModel().q_step1_get_author(abs_id)#getting presenting author
		abs_id    = Cryptography.encrypt(int(abs_id))
		json["data"] = render_template('users/SZTNAOI23/Q/step2.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)
		# 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)#getting user and abstract data
		#         data1     = AbstractModel().get_authors(abs_id)#geting co authors
		#         data2     = AbstractModel().q_step1_get_author(abs_id)#getting presenting author
		#         abs_id    = Cryptography.encrypt(int(abs_id))
		#         json["data"] = render_template('users/SZTNAOI23/Q/step2.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') +'"> click here to Home Page</a>','status' : 0,'data':''}
		#     return jsonify(json)

	def Get_co_author(abs_type,conf_id,conf_key):
		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("settings",settings)
		# print("limit_of_authors",limit_of_authors)
		if(limit_of_authors >= int(settings[0][0]["setting_value"])):
			limit   = 0
		else:
			limit   = 1
		return render_template('users/SZTNAOI23/Q/co_athour_table.html',data=data,limit=limit,conf_id=conf_id,conf_key=conf_key)

	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)
		is_next  = request.values.get('is_next')
		if (int(is_next) == 1):
			if(data["status_check"] == 0):
				data1    = {
						   'submitted_at' :  str(datetime.now()),
						   }
				authors_email       = AbstractModel().fp_authors_for_email(abs_id)#getting co authors details
				
				output              = AbstractModel().abstract_submited(user_id,abs_id,data["abs_type"],data1,conf_id)#updated the status to submited
				data                = AbstractModel().get_sept4_data(abs_id)
				for i in authors_email:
					template_name = 'Q_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,'confData':conf_data,'conf_id':conf_id,'conf_key':conf_key,'data1':authors_email}
					# return jsonify(mail_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)
				# 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):
		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/SZTNAOI23/Q/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):
		abs_id      =   unquote(abs_id)
		abs_id      = int(Cryptography.decrypt(abs_id))
		stepsdata   = AbstractModel().get_sept4_data(abs_id)
		co_auth     = AbstractModel().get_authors(abs_id)
		pr_auth     = AbstractModel().q_step1_get_author(abs_id)
		return render_template('users/SZTNAOI23/Q/view.html',abs_id=abs_id,data=stepsdata,data2=pr_auth,data1=co_auth,conf_id=conf_id,conf_key=conf_key)

def insert_and_delete_award(award_list,abs_id):
	old_award_data = AbstractModel().get_old_awardlist(abs_id)
	new_award_data = award_list
	insert_award_data = new_award_data
	delete_award = []
	if old_award_data:
		for j in old_award_data:  
			delete_award.append(str(j["award_id"]))
			if str(j["award_id"]) in new_award_data:
			   delete_award.remove(str(j["award_id"]))
			   insert_award_data.remove(str(j["award_id"]))
	if new_award_data:
		insert_award_data = new_award_data
		AbstractModel().insert_awardlist(insert_award_data,abs_id)
	if delete_award:
		delete_award =  ",".join(delete_award)
		AbstractModel().delete_awardlist(delete_award,abs_id)
	return "success"

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