from django.shortcuts import render_to_response
from django.http import HttpResponse, HttpResponseRedirect
from dojango.decorators import json_response
from models import Post
from models import UserData
from datetime import datetime, timedelta
from django.conf import settings
from django.contrib.auth.models import User, Group
from django.contrib import auth
from django.contrib.auth.decorators import login_required
import sys
import MySQLdb


###################### post ###############################
@json_response
def post(request):
	msg         = request.POST['text']
	remote_user = request.POST['remote_user']
	status_call = request.POST['status_call']
	
	mensaje_privado = "0"

	user_local              = User.objects.get(username=request.user)
	localdata, localcreated = UserData.objects.get_or_create(user=user_local)

	if(remote_user != "null"):
		user_remote               = User.objects.get(username=remote_user)
		remotedata, remotecreated = UserData.objects.get_or_create(user=user_remote)

	print "\tTexto enviado  : ", msg
	print "\tUsuario remoto : ", remote_user
	print "\tEstado llamada : ", status_call

	if (msg.find("MP:") >= 0):
		# Se comprueba si el usuario quiere enviar un mensaje privado
		remotedata.mensaje_privado = msg
		remotedata.save()
		print "\tMensaje privado guardado"
		mensaje_privado = "1"
		return get_posts(request)
	else:
		if (msg.find("MPRestore:") >= 0):
			# Se reinicia la variable mensaje privado a su valor por defecto
			localdata.mensaje_privado = "null"
			localdata.save()
			print "\tMensaje privado reseteado"
			mensaje_privado = "0"
			return get_posts(request)
		else:
			if ((remote_user != "inactivo") and (remote_user != "null")):
				# Se inicia la comprobacion del estado de la videollamada enviada
				print "\tComprobacion del estado de la llamada"
				remotedata.remote_user    = request.user.username
				localdata.remote_user     = remote_user
				if (status_call == "1"):
					# Inicio de solicitud de videollamada
					print "\tEl usuario", request.user.username, "quiere hablar con", remote_user
					if (remotedata.status_call != int("0")):
						# Si el usuario esta ocupado se anula la llamada al usuario solicitante
						print "\t Llamada anulada por indisponibilidad del usuario remoto"
						localdata.status_call  = int("3")
						localdata.remote_user  = "inactivo"
						localdata.save()
						return get_posts(request)
					else:								
						remotedata.status_call = int("1")
						remotedata.save()
						localdata.save()
				else:
					if (status_call == "2"):
						# Aceptacion del usuario remoto a la solicitud de videollamada
						print "\tEl usuario", request.user.username, "a aceptado la videollamada de", remote_user 				
						localdata.status_call  = int("2")
						remotedata.status_call = int("2")
						remotedata.save()
						localdata.save()
					else:
						if (status_call == "4"):
							# El usuario ha cancelado o finalizado la videollamada
							print "\tEl usuario", request.user.username, "detiene la llamada con", remote_user				
							localdata.status_call=int("0")
							remotedata.status_call=int("4")
							remotedata.save()
							localdata.save()
						else:
							# Estado de la videollamada inactiva
							remotedata.status_call = int("0")
							localdata.status_call  = int("0")
							remotedata.remote_user = "inactivo"
							localdata.remote_user  = "inactivo"
							remotedata.save()
							localdata.save()
		
	Post.objects.create(user=request.user, message=msg, canal=int(localdata.canal))
	return get_posts(request)


###################### update #############################
@json_response
def update(request):
	return get_posts(request)


###################### testpost ###########################
def testpost(request):
	messages = get_posts(request)['messages']
	return HttpResponse(messages)


###################### get_posts ##########################
def get_posts(request):
	
	now            = datetime.now()
	salir          = 'False'
	udata, created = UserData.objects.get_or_create(user=request.user)
	udata.last_req = now
	
	if not udata.connected:
		udata.connected = True
		admin           = User.objects.get(username=settings.ADMINS[0][0])
		Post.objects.create(user=admin, message='%s is connected.' % request.user.username, canal=0)
	udata.save()

	
	if udata.disconnected:
		print "\tMarcado desconectado:", str(udata.disconnected)
		udata.disconnected = False
		print "\tMarcado desconectado actualizado:", str(udata.disconnected)
		salir              = 'True'
		udata.save()
    
	# Usuario conectados
	before        = now - timedelta(seconds=settings.CONNECTED_AFTER_LAST_REQ)
	userlist      = []
	userlistcanal = []


	for ud in UserData.objects.all():
		if ud.last_req > before:
			# Agregamos el usuario a la lista de Usuarios Conectados
			userlist.append(ud.user.username)
			if (ud.canal == udata.canal):
				# Agregamos el usuario a la lista de Usuarios Conectados del mismo canal
				userlistcanal.append(ud.user.username)
		else:
			if ud.connected:
				# El usuario se ha desconectado
				ud.connected = False
				ud.save()
    
	lasts        = Post.objects.filter(canal = int(udata.canal)).order_by('-date').distinct()
	lasts        = list(lasts[:7])
	lasts.reverse()

	messages     = ''
	messagesaux1 = ''
	messagesaux2 = ''
	messagesaux3 = ''	
	messagest    = ''
	wgroup       = ""
	icono        = ""

	for m in lasts:
		messages += '<img src=%s> <i><b>%s:</b></i> %s<br>' % (m.user.get_profile().avatar_url(), m.user.username, m.message)
	for m2 in UserData.objects.all():
		if m2.connected:
			print "\tEl usuario", m2.user.username, "esta conectado"
			wgroup = m2.canal
			if (m2.status_call == int(2)):
				icono = "error.png'"
			else:
				icono = "videoconferencia.png'"

			if (m2.user.username == request.user.username):
				# Usuario solicitante: no se incluye camara para la videollamada
				messagesaux3 = "<li> <b onmouseover=\"return overlib('Haz doble click para enviar un mensaje privado a %s.');\" onmouseout=\"return nd();\" ondblclick=\"mensaje_privado('%s');\">%s</b> (canal:%d)</li>" % (m2.user.username, m2.user.username, m2.user.username, wgroup)
				messagest = messagest + messagesaux3
			else:
				# Se incluye camara para el resto de usuarios
				messagesaux1 = "<li><img id='%s' src='/chat/templates/" % m2.user.username
				messagesaux2 = messagesaux1 + icono
				messagesaux3 = messagesaux2 + " width='20' height='20' alt='' onmouseover=\"return overlib('Haz click para iniciar/detener la videollamada con %s.');\" onmouseout=\"return nd();\" onclick=iniciarvideollamada('%s') /> <b onmouseover=\"return overlib('Haz doble click para enviar un mensaje privado a %s.');\" onmouseout=\"return nd();\" ondblclick=\"mensaje_privado('%s');\">%s</b> (canal:%d)</li>" % (m2.user.username, m2.user.username, m2.user.username, m2.user.username, m2.user.username, wgroup)
				messagest = messagest + messagesaux3

	return {'success':True,
		'messages':messages,
		'users':'Conectados en este canal: <b>%s</b>' % ', '.join(userlistcanal),
		'messages2':messagest,
		'canal':udata.canal,
		'desconectado':salir,
		'video':str(udata.remote_user),
		'me':str(udata.user.username),
		'status':str(udata.status_call),
		'mensaje':str(udata.mensaje_privado),
		'wait_value':udata.refresh_period}


###################### logout #############################
def logout(request):
    usuariodesconectado = User.objects.get(username= request.user)
    udata, created = UserData.objects.get_or_create(user=usuariodesconectado)
    udata.disconnected = True
    udata.save()
    auth.logout(request)
    return HttpResponseRedirect("/chat/")


###################### canal ##############################
def canal(request):
    user = User.objects.get(username= request.user)
    usudata, usucreated = UserData.objects.get_or_create(user=user)
    if (usudata.canal == 1):
        canaldefault = "room1"
    else:
        if (usudata.canal == 2):
            canaldefault = "room2"
        else:
            canaldefault = "room3"
    canal = request.POST.get('canal', canaldefault)
    print "\tEligiendo canal"
    print "\t Ususuario", usudata.user
    print "\t Canal", canal
    
    try:
        group = Group.objects.get(name=canal)
        print "\tComprobamos que no este conectado al canal: %s" % canal
        if user.groups.filter(name=canal).count() != 0:
            print "\t Le agregamos al canal"
            #user.groups.clear()
            #user.groups = (group,)
            print "\tProceso de salvaguarda de canal"
            usudata, usucreated = UserData.objects.get_or_create(user=user)
            if ((canal == "room1") and (user.groups.filter(name=canal).count() == 1)):
                print "\t Recibido canal 1"
                usudata.canal = 1
                usudata.status_call = 0
                usudata.remote_user= "inactivo"
                usudata.mensaje_privado= "null"
                usudata.disconnected = False # Valor por defecto para desconexion
            if ((canal == "room2") and (user.groups.filter(name=canal).count() == 1)):
                print "\t Recibido canal 2"
                usudata.canal = 2
                usudata.status_call = 0
                usudata.remote_user= "inactivo"
                usudata.mensaje_privado= "null"
                usudata.disconnected = False # Valor por defecto para desconexion
            if (canal == "room3" and (user.groups.filter(name=canal).count() == 1)):
                print "\t Recibido canal 3"
                usudata.canal = 3
                usudata.status_call = 0
                usudata.remote_user= "inactivo"				
                usudata.mensaje_privado= "null"
                usudata.disconnected = False # Valor por defecto para desconexion
        else:
            print "\tError: al entrar en el grupo"
            return HttpResponseRedirect("/chat/error_grupo/")
        print "\t Se salva el canal en la BBDD"
        usudata.save()
        if (usudata.user.username != "admin"):
       	    user.is_staff = False
        else:
            user.is_staff = True
        user.save()
        print "\t Salvado correcto"
        print "\tProceso borrado de tabla videollamada"
        process = delete_table(request.user.username)
        if (process):
            print"\t\tProceso con exito"
        else:
            print"\t\tProceso con error"
            return HttpResponseRedirect("/chat/error/")
        return render_to_response("test.html")

    except:
        print "\tError: al entrar en el grupo"
        return HttpResponseRedirect("/chat/error/")


###################### delete_table #######################
def delete_table(m_username) :
    try:
        conn = MySQLdb.connect (host = "localhost", user = "admin", passwd = "chat", db = "chatdb2")
        cursor = conn.cursor()
    except MySQLdb.Error, e:
        # print "Error %d: %s" % (e.args[0], e.args[1])
        return False

	print "el nombre es" + musername 
    sql = 'DELETE FROM chat_registration WHERE m_username = %s'
    args = (m_username)
    cursor.execute(sql,args)

    cursor.close()
    conn.commit()
    conn.close()
    return True

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
	<head>
            <title>e-REdING. Biblioteca de la Escuela Superior de Ingenieros de Sevilla.</title>

                <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="description" content="Buscador de proyectos ETSI" />
<meta name="author" content="Daniel Callejo"/>
<meta name="author" content="Federico L&oacute;pez"/>
<meta name="author" content="Juli&aacute;n P&eacute;rez"/>
<meta name="author" content="Jos&eacute; Mar&iacute;a Vidal Vidal"/>
<base href="/bibing/proyectos/" /><link rel="shortcut icon" href="./favicon.ico" />
<link rel="stylesheet" href="./publico/css/estructura.css" type="text/css" />
<link rel="stylesheet" href="./publico/css/bootstrap.css" type="text/css" media="screen"/>
<link rel="stylesheet" href="./publico/css/enlaces-capas.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/pestanas.css" type="text/css"  /> 
<link rel="stylesheet" href="./publico/css/formularios.css" type="text/css" />
<link rel="stylesheet" href="./publico/css/lightbox.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/autocompleter.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/resultados.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/milista.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/explorador.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/ultimos.css" type="text/css"  />
<link rel="stylesheet" href="./publico/css/contactar.css" type="text/css"  />
<!-- <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" /> -->
<script src="./publico/javascript/jquery-1.9.1.min.js" type="text/javascript"></script>
<script src="./publico/javascript/bootstrap.js" type="text/javascript"></script>

<script src="./publico/javascript/mootools-1.2.4-core.js" type="text/javascript"></script>
<script src="./publico/javascript/mootools-1-1.2.4.2-more.js" type="text/javascript"></script>
<script src="./publico/javascript/targetbl.js" type="text/javascript"></script>
<script src="./publico/javascript/mensajes.js" type="text/javascript"></script>
<script src="./publico/javascript/form.js" type="text/javascript"></script>
<script src="./publico/javascript/autocompleter/Observer.js" type="text/javascript"></script>
<script src="./publico/javascript/autocompleter/Autocompleter.js" type="text/javascript"></script>
<script src="./publico/javascript/autocompleter/Autocompleter.Request.js" type="text/javascript"></script>
<script src="./publico/javascript/domready.js" type="text/javascript"></script>

<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-8T1TSNC1QY"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-8T1TSNC1QY');
</script>



<script type="text/javascript">
function seleccionar_todo(){
   for (i=0;i<document.formulario_marcados.elements.length;i++)
      if(document.formulario_marcados.elements[i].type == "checkbox")
         document.formulario_marcados.elements[i].checked=1
}
function deseleccionar_todo(){
   for (i=0;i<document.formulario_marcados.elements.length;i++)
      if(document.formulario_marcados.elements[i].type == "checkbox")
         document.formulario_marcados.elements[i].checked=0
} 
</script>
	</head>
    <body style="min-width: 960px; background-color: #e2e2e2; height: 100%">	
		<a name="arriba"></a>
<div>
<div id="header">
    <table id="Tabla_01" height="105" border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td>
            <img src="./publico/imagenes/cabecera/banner_new2_01.jpg" width="3" height="105" alt="">
        </td>
        <td>
            <img src="./publico/imagenes/cabecera/banner_new2_02.jpg" width="100" height="105" alt="">
        </td>
        <td width="100%" align="right"  style="min-width: 613px; background-repeat: no-repeat; background-position: top right; font-size: medium; font-weight: bold; color: white;">
            <table width="100%" height="105" border="0">
                <tr>
                    <td style=" vertical-align: top; width: 547px">
                        <!-- <a style="text-decoration: none" href="./"><img src="./publico/imagenes/cabecera/banner_new2_03.jpg"alt=""></a> -->
                        <a style="text-decoration: none" href="/bibing/proyectos/"><img src="./publico/imagenes/cabecera/banner_new2_03.jpg"alt=""></a>
                     </td>
                     <td  background="./publico/imagenes/cabecera/banner_new2_04.jpg" style="background-repeat: no-repeat; background-color: #c6d4e8;"><br><br><br>
                         &nbsp;
                        </td>
                    </tr>
             </table>
        </td>
    </tr>
    <tr style="border-top: 1px solid #ffffff;">
        <td colspan="3" id="menu_sup" style="font-size: small; text-align: right; background-color: #9c1f2f; vertical-align: bottom">
             
					<a href="/bibing/proyectos/" class="enlace " style=" color: #ffffff">Inicio&nbsp;&nbsp;|</a>
					<a href="/bibing/proyectos/acerca/" style=" color: #ffffff" class="enlace ">&nbsp;&nbsp;Acerca de&nbsp;&nbsp;|</a>
					
					<a href="/bibing/proyectos/contactar/" style=" color: #ffffff" class="enlace ">&nbsp;&nbsp;Contactar&nbsp;&nbsp;</a>
			 <!--       <a href="/bibing/proyectos/ayuda/" style=" color: #ffffff" class="enlace  ">&nbsp;&nbsp;Ayuda&nbsp;&nbsp;|</a> -->
					<!-- <form id="idioma" class=""  method="post" action="">
					<div class="inline" style="color: white">
					<input type="submit" class="tipo_letra " style=" color: #ffffff"name="idioma" value="Castellanossss" />&nbsp;&nbsp;
					</div>	
					</form> -->
			        </td>

    </tr>
    </table>
</div>
<br><br>
<div class="colmask rightmenu">
<div class="panel panel-default" style="margin:20px">
            <div class="panel-heading"><h4>IMPLANTACIÓN DE UNA COMUNICACIÓN CHAT CON DJANGO</h4><h5 style="color:grey"><span class="glyphicon glyphicon-user""></span> : <b>CUEVAS CEPEDA, MIGUEL ÁNGEL</b><br><span class="glyphicon glyphicon-book""></span>  :<b> Ingenier&iacute;a Telecomunicación</b></h5></div><div class="panel-body"><div class="contenido_proyecto"><div class="titulo2_explorador">Contenido del proyecto:</div><div class="ruta"><a href="use/abreproy/12051">Directorio ra&iacute;z</a>&nbsp;&nbsp;>&nbsp;&nbsp;<a href="use/abreproy/12051/direccion/django_chat%252F">django_chat</a>&nbsp;&nbsp;>&nbsp;&nbsp;<a href="use/abreproy/12051/direccion/django_chat%252Fchat%252F">chat</a>&nbsp;&nbsp;>&nbsp;&nbsp;<a href="use/abreproy/12051/direccion/django_chat%252Fchat%252Fviews2.py%7E%252F">views2.py~</a></div><div class="listing"></div></div></div></div>
</div>
</div>

        
	</body>
 
 
<!-- Inicio Google Analytics -->
<!--
	<script type="text/javascript">
		var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
		document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
	</script>
	
	<script type="text/javascript">
		try {
		var pageTracker = _gat._getTracker("UA-7789620-1");
		pageTracker._trackPageview();
	} 
		catch(err) {}
	</script>
-->
<!-- Fin Google Analytics -->

</html>

