Sindbad~EG File Manager

Current Path : /home/numerotech/conferencevideos.vrsi.in/vrsi_video_app/core/controller/
Upload File :
Current File : //home/numerotech/conferencevideos.vrsi.in/vrsi_video_app/core/controller/UserController.py

from flask import Flask, request, Blueprint, jsonify, redirect, url_for,flash, render_template,session, app,json,jsonify
from core.model.UserModel import UserModel
from core.model.Log import Log
from random import randint
import datetime
from core.library.email import EMAIL
from datetime import timedelta,date,datetime
from .. import Cryptography,Auth,RouteGroup
from core.library.helper import Helper
import math, random
import ast
# import collections
import os
from werkzeug.utils import secure_filename
from os.path import join, dirname, realpath

from urllib.parse import unquote
import time,requests
import base64
from itertools import groupby
from operator import itemgetter
from collections import defaultdict


app = Blueprint('user', __name__)



""" Strating page """ 
@app.route('/', methods = ["GET", "POST"])
def Home():
	return redirect(url_for('user.DayIndex'))
	if Helper.data_inprogress == 1:
		return redirect(url_for('user.Login'))
	else:
		return render_template('users/alert_page.html')

@app.route('/msg', methods = ["GET", "POST"])
def Msg():
	return render_template('users/alert_page.html')
   
""" Login and logout functions """
@app.route('/login')
def Login():
	return redirect(url_for('user.DayIndex'))
	# return redirect(url_for('user.Msg'))
	if Helper.data_inprogress == 1:
		return render_template('users/login.html')
	else:
		return render_template('users/alert_page.html')
@app.route('/admin_login')
def AdminLogin():
# 	return redirect(url_for('user.Msg'))
	if Helper.data_inprogress == 1:
		return render_template('users/login.html')
	else:
		return render_template('users/alert_page.html')		

@app.route('/post_login',methods = ["GET","POST"])
def Post_login():
	now = datetime.now()
	curr_dt    = now.strftime("%Y-%m-%d %H:%M:%S")
	if request.method == "POST":
		email     = request.form['email']
		if  not email :
			flash('Please enter your email-id ' , "errorMsg")
			return redirect (url_for('user.Login'))
		else :
			otp_random      = random.randint(1000,9999)
			otp_sent_at     = now
			otp_expire_on   = now + timedelta(minutes=30)
			otp_expire_at   = otp_expire_on
			user_output     = UserModel().get_users_email_data(email)
			
			if user_output : 
				# Auth.login(user_output)
				# code updated on May 30 ,29023
				user_id =  user_output["user_id"]
				encrypt_user_id  = Cryptography.encrypt(user_id)
				session['user']  = user_output
				
				end_time      = now + timedelta(minutes = 180)
				otp_verified_at = curr_dt
				data        = {'email' : email, 'updated_at' : curr_dt ,"full_name" : " ","session_end_time" : end_time, "otp_verified_at" : curr_dt}
				update_user     = UserModel().updateUser(user_id,data)

				return redirect(url_for('user.DayIndex',user_id=encrypt_user_id))


				# user_id         = user_output['user_id']
				# data            = {'otp_expire_on' : otp_expire_on,'otp_sent_at':otp_sent_at,'otp' : otp_random}
				# update_user     = UserModel().updateUser(user_id,data)
				# encrypt_user_id  = Cryptography.encrypt(int(user_output["user_id"]))
				# subject         = str(otp_random)+"-OTP for VRSI 2022 - Scientific Session Recordings"
				# to              = user_output["email"]
				# email           = user_output["email"]
				
				# html    = render_template('users/email/otp_generation_mail.html',user_id=user_id,data=user_output,otp=otp_random,otp_expire_at=otp_expire_at)
				# EMAIL.sendMail(subject,html,email)	
				# encrypt_user_id  = Cryptography.encrypt(user_id)
				# msg = "OTP send to your mail-id " + email
				# flash(msg , "successMsg")
				# return redirect (url_for('user.OtpPage',user_id = encrypt_user_id)) 
			else:
				# flash("Access Denied. " ,"errorMsg")
				# return redirect(url_for('user.Login'))
				end_time  = now + timedelta(minutes = 180)
				data        = {'email' : email, 'created_at' : curr_dt ,"full_name" : " ","session_end_time" : end_time,"otp_verified_at" : curr_dt}
				# data        = {'email' : email, 'created_at' : curr_dt,'otp_expire_on' : otp_expire_on,'otp_sent_at':otp_sent_at,'otp' : otp_random}
				user_output = UserModel().insertUser(data)
				user_id     = user_output['user_id']

				encrypt_user_id  = Cryptography.encrypt(user_id)
				session['user'] = user_output
				
				
				return redirect(url_for('user.DayIndex',user_id=encrypt_user_id))
			# 	subject         = str(otp_random)+"-OTP for VRSI 2022 - Scientific Session Recordings "

			# html    = render_template('users/email/otp_generation_mail.html',user_id=user_id,data=user_output,otp=otp_random,otp_expire_at=otp_expire_at)
			# EMAIL.sendMail(subject,html,email)	
			# encrypt_user_id  = Cryptography.encrypt(user_id)
			# msg = "OTP send to your mail-id " + email
			# flash(msg , "successMsg")
			# return redirect (url_for('user.OtpPage',user_id = encrypt_user_id)) 
			# flash("Sorry. We cannot find a membership record matching the given email id.  For assistance,  please write to support@numerotec.com" )
	else :  
		flash("Error. Try again !" , "errorMsg")
		return redirect (url_for('user.Login'))
		


@app.route('/logout', methods = ["GET", "POST"])
# @RouteGroup.login_required
def Logout():
	if session.get("user") :
		session.pop('user')
		is_session_end = request.values.get('is_session_end') or 0
		if is_session_end and int(is_session_end) > 0 :
			flash("Session expired. Please re-login" ,"errorMsg")
			return redirect(url_for('user.Login'))
		else :
			pass
	return redirect(url_for('user.Login'))

""" END Login and Logout functions """
""" OTP LOGIN START """

@app.route('/otp_page/<user_id>', methods = ["GET","POST"])
# @RouteGroup.login_required
def OtpPage(user_id):
	user_id         = unquote(user_id)
	user_id         = int(Cryptography.decrypt(user_id))
	encrypt_user_id = Cryptography.encrypt(int(user_id))
	return render_template('users/otp_new.html',encrypt_user_id=encrypt_user_id,user_id=user_id)

@app.route('/otp_password/<user_id>', methods = ["GET","POST"])
# @RouteGroup.login_required
def OtpPassword(user_id):
	user_id     = unquote(user_id)
	user_id     = int(Cryptography.decrypt(user_id))
	user        = UserModel().get_member(user_id)
	email       = user["email"]
	encrypt_user_id  = Cryptography.encrypt(int(user_id))
	msg = "An OTP has been sent to your registered email id "+ Helper.email_mask(email)
# 	flash(msg ,"successMsg")
	return redirect(url_for('user.OtpPage',user_id=encrypt_user_id))

@app.route('/otp_mail/<user_id>', methods = ["GET","POST"])
# @RouteGroup.login_required
def OtpMail(user_id):
	# random.seed(time.clock())
	user_id     = unquote(user_id)
	user_id     = int(Cryptography.decrypt(user_id))
	now         = datetime.now()
	user        = UserModel().get_otp_random(user_id)
	if user['otp']: 
		otp_random = user['otp']
	else :  
		digits      = "123456789"
		otp_random  = random.randint(1000,9999)

	otp_sent_at     = now
	otp_expire_on   = now + timedelta(minutes=30)
	otp_expire_at   = otp_expire_on
	data            = {'otp_expire_on' : otp_expire_on,'otp_sent_at':otp_sent_at,'otp' : otp_random}
	user            = UserModel().updateOtpAndGetUser(user_id,data)
	if user :
		otp_expire_on =  datetime.strptime(str(otp_expire_on), "%Y-%m-%d %H:%M:%S.%f").strftime('%d-%m-%Y  %H:%M:%S.%f')
		period        = otp_expire_at.strftime('%p')
		hour          = otp_expire_at.strftime('%I')
		date          = datetime.strptime(str(otp_expire_on), "%d-%m-%Y  %H:%M:%S.%f")
		if len(str(date.minute)) == 1:
			minute = "0"+str(date.minute)
		else:
			minute = date.minute
		month_num = date.month
		datetime_object = datetime.strptime(str(month_num), "%m")
		full_month_name = datetime_object.strftime("%B")
		subject = str(otp_random)+"-OTP for VRSI 2022 - Scientific Session Recordings , valid upto "+str(date.day)+" "+str(full_month_name)+" "+str(date.year)+" "+str(hour)+":"+str(minute)+" "+period
		to   = user["email"]
		# to="mukeshkumar@numerotec.com"
		html    = render_template('users/email/otp_generation_mail.html',user_id=user_id,data=user,otp=otp_random,otp_expire_at=otp_expire_at)
		# return html
		# send mail using mail gun
		EMAIL.sendMail(subject,html,to)
	if user:
		encrypt_user_id  = Cryptography.encrypt(int(user_id))
		# return redirect(url_for('user.OtpPassword',user_id=encrypt_user_id))
		# msg = "OTP send to your mail-id + " email
		msg = "An OTP has been sent to your registered email id "+ Helper.email_mask(to)
		flash(msg ,"successMsg")
		return redirect(url_for('user.OtpPassword',user_id=encrypt_user_id))
		# return redirect(url_for('user.OtpPage',user_id=encrypt_user_id))

@app.route('/verify_otp/<user_id>', methods = ["POST"])
def VerifyOtp(user_id):
	try:
		encrypt_user_id  = unquote(user_id)
		user_id     = Cryptography.decrypt(encrypt_user_id)
		user_id     = int(user_id)

		now         = datetime.now()
		otp         = request.values.get('otp_number')

		userData    = UserModel().getUserByUserID(user_id)
		if userData :
			if userData["email"] == Helper.testmail and int(otp) == 9999 :
				session['user'] = userData

				# return redirect(url_for('user.Vidoes',user_id=encrypt_user_id))
				# return redirect(url_for('user.VidoeIndex',user_id=encrypt_user_id))
				# DayIndex
				return redirect(url_for('user.DayIndex'))

			if(int(otp) == userData['otp']) :
				end_time  = now + timedelta(minutes = 180)
				data      = {'otp' : None, 'otp_verified_at':now , 'session_end_time' : end_time}
				output    = UserModel().update_member(user_id,data)

				otp_expire_on  = datetime.strptime(str(userData['otp_expire_on']),'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d %H:%M:%S')
				if str(now)>str(otp_expire_on):
					
					flash("Expired!OTP valid for 1 mintue" , "errorMsg")
					return render_template('users/otp_new.html',encrypt_user_id=encrypt_user_id,user_id=user_id)
				else:
					
					session['user'] = userData
					# return redirect(url_for('user.VidoeIndex',user_id=encrypt_user_id))
					return redirect(url_for('user.DayIndex'))
					# check payment already paid or not here ... 
				# 	checkAlreadyPaid = UserModel().checkAlreadyPaid(user_id)
				# 	if checkAlreadyPaid :
				# 		session['user'] = userData
				# 		# return redirect(url_for('user.Vidoes',user_id=encrypt_user_id))
				# 		return redirect(url_for('user.VidoeIndex',user_id=encrypt_user_id))
				# 	else : 
				# 		return redirect(url_for('user.MakePayment',user_id=encrypt_user_id))
			else:
				flash("Incorrect OTP.  Please provide the correct OTP" , "errorMsg")
				return render_template('users/otp_new.html',encrypt_user_id=encrypt_user_id,user_id=user_id)
		else :
			return "USER DATA NOT EXIST"		
	except Exception as e:
		return str(e)

@app.route('/make_payment/<user_id>',methods = ["GET","POST"])
def MakePayment(user_id):
	encrypt_user_id  = unquote(user_id)
	user_id     = Cryptography.decrypt(encrypt_user_id)
	user_id     = int(user_id)
	userData    = UserModel().getUserByUserID(user_id)
	if userData :
		return render_template('users/make_payment.html',userData=userData,user_id = user_id,encrypt_user_id = encrypt_user_id)
	else :
		flash("Invalid Login")
		return redirect(url_for('user.Login'))

@app.route('/post_payment',methods = ["POST"])
def PostPayment():
	now         = datetime.now()
	curr_dt     = now.strftime("%Y-%m-%d %H:%M:%S")
	user_id         = request.form['user_id']
	full_name       = request.form['full_name']
	mobile          = request.form['mobile']
	amount          = request.form['amount']
	encrypt_user_id = request.form['encrypt_user_id']
	unique_id   = now.strftime('%Y%m%d%H%M%S%f')
	url = 'https://paymentapi.numerotech.com/api_key'
	r = requests.get(url)
	apikey = json.loads(r.content.decode())
	am_id = 18
	for index,value in enumerate(apikey) :
		api_am_id = value['am_id']
		if api_am_id == am_id :
			app_key  = value['app_key']
			app_name = value['app_name']
			break
		else :
			pass
	payment_for = app_name	
	unique_id = app_key+"_"+unique_id
	data_for_user    = {'full_name' : full_name ,'mobile' : mobile , 'updated_at' : curr_dt}
	data_for_payment = {'user_id' :user_id ,'amount' : amount , 'unique_id' : unique_id,'payment_status' : 'YETTOPAY','created_at' : curr_dt}

	save_pay_record = UserModel().savePayRecord(user_id,data_for_user,data_for_payment) 

	return redirect(url_for('user.CallPayment',user_id=encrypt_user_id,unique_id=unique_id))


@app.route('/call_payment/<user_id>/<unique_id>', methods = ["GET", "POST"])
def CallPayment(user_id,unique_id):
	encrypt_user_id = unquote(user_id)
	user_id         = Cryptography.decrypt(encrypt_user_id)
	user_id         = int(user_id)
	getData = UserModel().getDataforPayments(user_id,unique_id)
	if getData :
		am_id           = 18
		# gateway_id = base64.b64encode(bytes(gateway_id, 'utf-8'))
		sample_string       = str(am_id)
		sample_string_bytes = sample_string.encode("ascii")
		base64_bytes        = base64.b64encode(sample_string_bytes)
		am_id_base64        = base64_bytes.decode("ascii")
		res_url             = request.host_url
		# if "https" in res_url :
		# 	pass
		# else :
		# 	res_url = res_url.replace("http" ,"https")	
		getData['res_url']  = res_url+"payment_server_response"
		
		getData['remarks']  = " VRSI 2022"
		getData['is_test']  = 1
		getData['am_id']    = am_id
		return render_template("users/call_payment_screen.html" ,data= getData,am_id_base64 =am_id_base64,user_id=user_id)
	else : 
		flash("Invalid URL.")
		return redirect(url_for('user.Login'))

@app.route('/payment_server_response', methods = ["GET", "POST"])
def PaymentServerResponse():
	payment_id      = request.values.get('payment_id')
	status          = request.values.get('status')
	email           = request.values.get('email')
	mobile          = request.values.get('mobile')
	unique_id       = request.values.get('unique_id') #['3343434']
	payment_method  = request.values.get('method')
	result      = UserModel().getPaymentByUniqueId(email,unique_id)
	user_id     = result['user_id']
	if payment_id is  None:
		encrypt_user_id  = Cryptography.encrypt(int(user_id))
		flash("Transaction failed" , "errorMsg")
		return redirect(url_for('user.MakePayment' ,user_id =encrypt_user_id ))
	else:
		now         = datetime.now()
		dt_string   = now.strftime('%Y-%m-%d %H:%M:%S')
		data 		= {'api_payment_id' : payment_id,'payment_status' : status ,'updated_at' :dt_string,'paid_at':dt_string,'payment_method':payment_method}

		update_and_get_data = UserModel().updatePayments(unique_id,data) # update payment status in your table

		if status == "success"  or status == "captured":
			encrypt_user_id     = Cryptography.encrypt(int(user_id))
			result.pop("amount")
			result.pop("updated_at")
			session['user']     = result
			
			flash("Payment success", "successMsg")
			# return redirect(url_for('user.Vidoes',user_id=encrypt_user_id))
			return redirect(url_for('user.VidoeIndex',user_id=encrypt_user_id))
		else:
			flash("Payment failed", "errorMsg")
			encrypt_user_id  = Cryptography.encrypt(int(user_id))
			return redirect(url_for('user.MakePayment',user_id=encrypt_user_id))



""" OTP LOGIN END """

@app.route('/videos/<user_id>',methods = ["GET","POST"])
# @RouteGroup.login_required
def Vidoes(user_id):
# 	return redirect(url_for('user.Msg'))
	if session.get("user") :
		now = datetime.now()
		user_id     = unquote(user_id)
		user_id     = int(Cryptography.decrypt(user_id))
		user_data = UserModel().get_member(user_id)
		if not user_data:
			return "<html><h1>PAGE NOT FOUND</h1><h4>Sorry, the page you were looking for could not found. Please check the URL and try your luck again.</h4></html>"
		else :
			session_end_time  = user_data["session_end_time"]
			if(now > session_end_time) :
				flash("Session expired. Please re-login.")
				return redirect(url_for('user.Login'))

			else :
				
				dt_string    = now.strftime("%Y-%m-%d %H:%M:%S")

				diff = session_end_time - now
				
				diff_times = str(diff)
				diff_times_1 = diff_times.split(':')
				diff_hour = diff_times_1[0]
				diff_minutes = diff_times_1[1]
				diff_seconds = diff_times_1[2]
				diff_seconds = float(diff_seconds)
				diff_seconds = int(diff_seconds)
				
				video_link = UserModel().get_video_link()
				# return  "wait"
				return render_template('users/video_screen.html',data=user_data,video_link=video_link,str = str ,diff_hour = diff_hour,diff_minutes=diff_minutes,diff_seconds=diff_seconds)
	else :
		flash("Invalid Login" , "errorMsg")
		return redirect(url_for('user.Login'))



@app.route('/videos_testing/<user_id>',methods = ["GET","POST"])
# @RouteGroup.login_required
def VidoesTesting(user_id):
	user_id     = unquote(user_id)
	user_id     = int(Cryptography.decrypt(user_id))
	user_data = UserModel().get_member(user_id)
	if not user_data:
		session_end_time  = user_data.session_end_time
		end_month = session_end_time.strftime("%m")
		end_date  = session_end_time.strftime("%d")
		end_hour  = session_end_time.strftime("%H")
		end_minutes = session_end_time.strftime("%M")

		dt_string_format = now.strftime("%m-%d")
		return "<html><h1>PAGE NOT FOUND</h1><h4>Sorry, the page you were looking for could not found. Please check the URL and try your luck again.</h4></html>"
	video_link = UserModel().get_video_link()
	return render_template('users/video_screen_testing.html',data=user_data,video_link=video_link,str = str)

# New update on Dec 16 , 2022
@app.route('/video_index',methods = ["GET","POST"])
# @RouteGroup.login_required
def VidoeIndex():
	video_link = UserModel().get_video_link()
	return render_template('users/video_index.html',video_link=video_link,str = str )
	if session.get("user") :
		now = datetime.now()
		user_id     = unquote(user_id)
		enc_user_id = user_id
		user_id     = int(Cryptography.decrypt(user_id))
		user_data = UserModel().get_member(user_id)
		if not user_data:
			return "<html><h1>PAGE NOT FOUND</h1><h4>Sorry, the page you were looking for could not found. Please check the URL and try your luck again.</h4></html>"
		else :
			session_end_time  = user_data["session_end_time"]
			if(now > session_end_time) :
				flash("Session expired. Please re-login.")
				return redirect(url_for('user.Login'))

			else :
				
				dt_string  = now.strftime("%Y-%m-%d %H:%M:%S")
				diff       = session_end_time - now
				
				diff_times = str(diff)
				diff_times_1 = diff_times.split(':')
				diff_hour    = diff_times_1[0]
				diff_minutes = diff_times_1[1]
				diff_seconds = diff_times_1[2]
				diff_seconds = float(diff_seconds)
				diff_seconds = int(diff_seconds)
				video_link = UserModel().get_video_link()
				# return  "wait"
				return render_template('users/video_index.html',data=user_data,enc_user_id = enc_user_id,video_link=video_link,str = str ,diff_hour = diff_hour,diff_minutes=diff_minutes,diff_seconds=diff_seconds)
	else :
		flash("Invalid Login" , "errorMsg")
		return redirect(url_for('user.Login'))


@app.route('/view_video/<int:video_id>/<int:program_day>/<int:year>',methods = ["GET","POST"])
def ViewVideo(video_id,program_day,year):
	video_link = UserModel().get_video_linkByVideoIdAndDay(video_id,program_day,year)

	speaker_name = " "

	if video_link :
		video_link_1   = video_link[0]
		

		min_video_id      = video_link_1["min_video_id"]
		max_video_id      = video_link_1["max_video_id"]
		next_video_id     = video_link_1["next_video_id"]
		previous_video_id = video_link_1["previous_video_id"]
		video_name_11        = video_link_1["video_name"]
		

		video_name_1        = video_name_11.split("<br/>")
		video_name          = video_name_1[0]
		if "<br/>" in video_name_11:
			speaker_name        = video_name_1[1]
		else :
			pass	

		if video_name_1 :
			pass
		else : 
			video_name   = ""	
			speaker_name = ""
	else :
		return "<h4>Records does not exist. </h4>"	

	return render_template('users/video_screen_2.html',video_name=video_name,speaker_name=speaker_name,video_link=video_link,str = str ,min_video_id=min_video_id,max_video_id=max_video_id,next_video_id=next_video_id,previous_video_id=previous_video_id,video_id=video_id,program_day=program_day,year=year)
	# speaker_name = ""
	# video_name   = ""
	# if session.get("user") :
	# 	now = datetime.now()
	# 	user_id     = unquote(user_id)
	# 	enc_user_id = user_id
	# 	user_id     = int(Cryptography.decrypt(user_id))
	# 	user_data = UserModel().get_member(user_id)
	# 	if not user_data:
	# 		return "<html><h1>PAGE NOT FOUND</h1><h4>Sorry, the page you were looking for could not found. Please check the URL and try your luck again.</h4></html>"
	# 	else :
	# 		session_end_time  = user_data["session_end_time"]
	# 		if(now > session_end_time) :
	# 			flash("Session expired. Please re-login.")
	# 			return redirect(url_for('user.Login'))

	# 		else :
				
	# 			dt_string  = now.strftime("%Y-%m-%d %H:%M:%S")
	# 			diff       = session_end_time - now
				
	# 			diff_times = str(diff)
	# 			diff_times_1 = diff_times.split(':')
	# 			diff_hour    = diff_times_1[0]
	# 			diff_minutes = diff_times_1[1]
	# 			diff_seconds = diff_times_1[2]
	# 			diff_seconds = float(diff_seconds)
	# 			diff_seconds = int(diff_seconds)
				
	# 			video_link = UserModel().get_video_linkByVideoIdAndDay(video_id,program_day)
	# 			if video_link :
	# 				video_link_1   = video_link[0]
	# 				min_video_id      = video_link_1["min_video_id"]
	# 				max_video_id      = video_link_1["max_video_id"]
	# 				next_video_id     = video_link_1["next_video_id"]
	# 				previous_video_id = video_link_1["previous_video_id"]
	# 				video_name_11        = video_link_1["video_name"]
					

	# 				video_name_1        = video_name_11.split("<br/>")
	# 				video_name          = video_name_1[0]
	# 				if "<br/>" in video_name_11:
	# 					speaker_name        = video_name_1[1]
	# 				else :
	# 					pass	

	# 				if video_name_1 :
	# 					pass
	# 				else : 
	# 					video_name   = ""	
	# 					speaker_name = ""
	# 			else :
	# 				return "<h4>Records does not exist. </h4>"	

	# 			return render_template('users/video_screen_2.html',video_name=video_name,speaker_name=speaker_name,enc_user_id = enc_user_id, data=user_data,video_link=video_link,str = str ,diff_hour = diff_hour,diff_minutes=diff_minutes,diff_seconds=diff_seconds,min_video_id=min_video_id,max_video_id=max_video_id,next_video_id=next_video_id,previous_video_id=previous_video_id,video_id=video_id,program_day=program_day)
	# else :
	# 	flash("Invalid Login" , "errorMsg")
	# 	return redirect(url_for('user.Login'))


@app.route('/view_video_testing/<int:video_id>/<int:program_day>',methods = ["GET","POST"])
def ViewVideoTesting(video_id,program_day):
# 	return redirect(url_for('user.Msg'))
	speaker_name = ""
	video_name   = ""
	if session.get("user") :
		now = datetime.now()
		user_id     = unquote(user_id)
		enc_user_id = user_id
		user_id     = int(Cryptography.decrypt(user_id))
		user_data = UserModel().get_member(user_id)
		if not user_data:
			return "<html><h1>PAGE NOT FOUND</h1><h4>Sorry, the page you were looking for could not found. Please check the URL and try your luck again.</h4></html>"
		else :
			session_end_time  = user_data["session_end_time"]
			if(now > session_end_time) :
				flash("Session expired. Please re-login.")
				return redirect(url_for('user.Login'))

			else :
				
				dt_string  = now.strftime("%Y-%m-%d %H:%M:%S")
				diff       = session_end_time - now
				
				diff_times = str(diff)
				diff_times_1 = diff_times.split(':')
				diff_hour    = diff_times_1[0]
				diff_minutes = diff_times_1[1]
				diff_seconds = diff_times_1[2]
				diff_seconds = float(diff_seconds)
				diff_seconds = int(diff_seconds)
				# video_link = UserModel().get_video_linkByVideoId(video_id)
				video_link = UserModel().get_video_linkByVideoIdAndDay(video_id,program_day)
				if video_link :
					video_link_1   = video_link[0]
					min_video_id      = video_link_1["min_video_id"]
					max_video_id      = video_link_1["max_video_id"]
					next_video_id     = video_link_1["next_video_id"]
					previous_video_id = video_link_1["previous_video_id"]
					video_name_11        = video_link_1["video_name"]
					

					video_name_1        = video_name_11.split("<br/>")
					video_name          = video_name_1[0]
					if "<br/>" in video_name_11:
						speaker_name        = video_name_1[1]
					else :
						pass	

					if video_name_11 :
						pass
					else : 
						video_name   = ""	
						speaker_name = ""
				else :
					return "<h4>Records does not exist. </h4>"

				return render_template('users/video_screen_2_testing.html',enc_user_id = enc_user_id, data=user_data,video_link=video_link,str = str ,diff_hour = diff_hour,diff_minutes=diff_minutes,diff_seconds=diff_seconds,min_video_id=min_video_id,max_video_id=max_video_id,next_video_id=next_video_id,previous_video_id=previous_video_id,video_id=video_id,program_day=program_day)
	else :
		flash("Invalid Login" , "errorMsg")
		return redirect(url_for('user.Login'))


# DEC 29 ,2022 Ganesan J for Day index VRSI 22
# New update on Dec 16 , 2022
# @app.route('/day_index/<user_id>',methods = ["GET","POST"])
# def DayIndex(user_id):
@app.route('/day_index',methods = ["GET","POST"])
def DayIndex():
	day_index = UserModel().getDataForDay()
	years = defaultdict(list)
	for i in day_index:
	 	years[i.get('year')].append(i)

	
	return render_template('users/day_index.html',day_index=day_index,str = str,years=years )
	if session.get('user') :

		now = datetime.now()
		user_id     = unquote(user_id)
		enc_user_id = user_id
		user_id     = int(Cryptography.decrypt(user_id))
		user_data = UserModel().get_member(user_id)
		
		if not user_data:
			return "<html><h1>PAGE NOT FOUND</h1><h4>Sorry, the page you were looking for could not found. Please check the URL and try your luck again.</h4></html>"
		else :
			session_end_time  = user_data["session_end_time"]
			if(now > session_end_time) :
				flash("Session expired. Please re-login.")
				return redirect(url_for('user.Login'))

			else :
				
				dt_string  = now.strftime("%Y-%m-%d %H:%M:%S")
				diff       = session_end_time - now
				
				diff_times = str(diff)
				diff_times_1 = diff_times.split(':')
				diff_hour    = diff_times_1[0]
				diff_minutes = diff_times_1[1]
				diff_seconds = diff_times_1[2]
				diff_seconds = float(diff_seconds)
				diff_seconds = int(diff_seconds)
				day_index = UserModel().getDataForDay()
				return render_template('users/day_index.html',data=user_data,enc_user_id = enc_user_id,day_index=day_index,str = str ,diff_hour = diff_hour,diff_minutes=diff_minutes,diff_seconds=diff_seconds)
	else :
		
		flash("Invalid Login" , "errorMsg")
		return redirect(url_for('user.Login'))


# getDataByDay		
@app.route('/daywise_video_index/<int:program_day>/<int:year>',methods = ["GET","POST"])
# @RouteGroup.login_required
def DaywiseVideoIndex(program_day,year):
	day_index = UserModel().getDataByDay(program_day,year)
	print("...............1..........",day_index)
	return render_template('users/hall_index.html',day_index=day_index,str = str,int=int ,itemgetter =itemgetter ,groupby = groupby,program_day=program_day,year=year)
	if session.get("user") :
		now = datetime.now()
		user_id     = unquote(user_id)
		enc_user_id = user_id
		user_id     = int(Cryptography.decrypt(user_id))
		user_data = UserModel().get_member(user_id)
		if not user_data:
			return "<html><h1>PAGE NOT FOUND</h1><h4>Sorry, the page you were looking for could not found. Please check the URL and try your luck again.</h4></html>"
		else :
			session_end_time  = user_data["session_end_time"]
			if(now > session_end_time) :
				flash("Session expired. Please re-login.")
				return redirect(url_for('user.Login'))

			else :
				
				dt_string  = now.strftime("%Y-%m-%d %H:%M:%S")
				diff       = session_end_time - now
				
				diff_times = str(diff)
				diff_times_1 = diff_times.split(':')
				diff_hour    = diff_times_1[0]
				diff_minutes = diff_times_1[1]
				diff_seconds = diff_times_1[2]
				diff_seconds = float(diff_seconds)
				diff_seconds = int(diff_seconds)
				day_index = UserModel().getDataByDay(program_day,year)
				return render_template('users/hall_index.html',data=user_data,enc_user_id = enc_user_id,day_index=day_index,str = str ,diff_hour = diff_hour,diff_minutes=diff_minutes,diff_seconds=diff_seconds,int=int ,itemgetter =itemgetter ,groupby = groupby,program_day=program_day,year=year)
	else :
		flash("Invalid Login" , "errorMsg")
		return redirect(url_for('user.Login'))
	
@app.route('/bulk_mail',methods = ["GET","POST"])
def BulkMail():
	getUsers  =  UserModel().getDelegates()
	if getUsers :
		for index,value  in enumerate(getUsers) :
			full_name = value["full_name"]
			email     = value["email"]
			subject   = "Dear " + full_name + " VRSI 2022 - Scientific Session Recordings ."
			

			html = render_template('users/email/bulk_mail.html' ,full_name=full_name,email=email)
			EMAIL.sendMail(subject,html,email)
	else :
		return "<h4>Delegate Records not exists. </h4>"		


	return  "Mail has been sent."		
		









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