Ajax en Moodle

Ajax en Moodle

de Asier Ramos Martinez -
Número de respuestas: 3
He hecho una aplicacion en php, para calcular el tiempo y me gustaria que esa aplicacion se cargase y mostrase el tiempo que llevan conectados. Por ello habia pensado cargar con AJAX mi pagina php que es la que contiene el script. El codigo de Ajax es el siguiente y no se porque falla:

index.php

<html>

<head>

<title>Registro con AJAX</title>

<script language="JavaScript" type="text/javascript" src="ajax.js"></script>


</head>

<body>
<form name="nuevo_empleado" action="" onsubmit="enviarDatosEmpleado(); return false">
<input type="submit" name="Submit" value="Grabar" />
</form>
<div id="resultado"></div>
</body>

</html>


ajax.js

function objetoAjax(){

var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}


function enviarDatosEmpleado(){
//donde se mostrará lo resultados
divResultado = document.getElementById('resultado');
//valores de los inputs
nom=document.nuevo_empleado.nombres.value;
dep=document.nuevo_empleado.departamento.value;
suel=document.nuevo_empleado.sueldo.value;
//instanciamos el objetoAjax
ajax=objetoAjax();
//uso del medotod POST
//archivo que realizará la operacion
//registro.php
ajax.open("POST", "../infor/libpropia.php",true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
//mostrar resultados en esta capa
divResultado.innerHTML = ajax.responseText
//llamar a funcion para limpiar los inputs
}
}
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//enviando los valores
}


libpropia.php

<?

function RestarHoras($horaini,$horafin)
{
$horai=substr($horaini,0,2);
$mini=substr($horaini,2,2);
$segi=substr($horaini,4,2);

$horaf=substr($horafin,0,2);
$minf=substr($horafin,2,2);
$segf=substr($horafin,4,2);

$ini=((($horai*60)*60)+($mini*60)+$segi);
$fin=((($horaf*60)*60)+($minf*60)+$segf);

$dif=$fin-$ini;

/*$difh=floor($dif/3600);
$difm=floor(($dif-($difh*3600))/60);
$difs=$dif-($difm*60)-($difh*3600);
return date("H:i:s",mktime($difh,$difm,$difs));*/
return $dif;
}

function RestarHoras2($horaini,$horafin)
{
$horai=substr($horaini,0,2);
$mini=substr($horaini,2,2);
$segi=substr($horaini,4,2);

$horaf=substr($horafin,0,2);
$minf=substr($horafin,2,2);
$segf=substr($horafin,4,2);

$ini=((($horai*60)*60)+($mini*60)+$segi);
$fin=((($horaf*60)*60)+($minf*60)+$segf);

$dif=$fin-$ini;

$difh=floor($dif/3600);
$difm=floor(($dif-($difh*3600))/60);
$difs=$dif-($difm*60)-($difh*3600);
return date("H:i:s",mktime($difh,$difm,$difs));
}

function SumarHoras($horaini,$horafin)
{
//echo "Recibido:".$horaini." y ".$horafin."<br>";
$horai=substr($horaini,0,2);
$mini=substr($horaini,3,2);
$segi=substr($horaini,6,2);

$horaf=substr($horafin,0,2);
$minf=substr($horafin,3,2);
$segf=substr($horafin,6,2);
 
$ini=((($horai*60)*60)+($mini*60)+$segi);
$fin=((($horaf*60)*60)+($minf*60)+$segf);

$dif=$fin+$ini;

$difh=floor($dif/3600);
$difm=floor(($dif-($difh*3600))/60);
$difs=$dif-($difm*60)-($difh*3600);
return date("H:i:s",mktime($difh,$difm,$difs));
}

function CalculaTiempo($id){
global $CFG;
//$tiempo=time();
//$dia= date('d',$tiempo);
//$mes= date('m',$tiempo);
//echo date('d//m//y','1234513211');
 
//montamos sql con userid
$sql="select time, action from({$CFG->prefix}log) where userid=".$id;
//$sql='select time, action from beta_log where month(from_unixtime(time))='.$mes.' and day(from_unixtime(time))='.$dia.' and userid='.$id;
//echo $sql. $id . $CFG->prefix.'<br \>';
$log = get_records_sql($sql);

$prireg=0;
$dursession=array();
$cont2=0;
//operaciones para calcular el tiempo almacenado en los logs
foreach($log as $entrada_log){
if($cont==0){
$prireg= $entrada_log->time;
$tmpdia1=date('d',$prireg);
$prireg= date('His',$prireg);
$tmphora1=$prireg;
$cont++;
}else{
$tmphora2= $entrada_log->time;
$action= $entrada_log->action;
$tmpdia2=date('d',$tmphora2);
$tmphora2=date('His',$tmphora2);
$restahoras= RestarHoras($tmphora1,$tmphora2);
/*$hora1=substr($tmphora1,0,2);
$hora2=substr($tmphora2,0,2);*/
//echo $priregdia . $tmpdia2;
if($tmpdia2>$tmpdia1 and $tmphora2<$tmphora1){
/*if($id==145){
echo "Fail";
echo substr($restahoras,3,2)."-----> FAIL";
echo "FAIL->".$restahoras."<br \>";
}*/
$cont=0;
/*if($id==145){
echo $ultreg ." - ".$prireg." = ".$dursession[$cont2]. "<br \>";
}*/
$cont2++;
//echo "Contador=".$cont2."<br \>";
}else{
if($restahoras<3600 and $action!='logout'){
/*if($id==145){
echo substr($restahoras,3,2)." -----> OK RESTO ";
echo "OK->".$restahoras."<br \>";
}*/
$ultreg=$tmphora2;
$dursession[$cont2]=RestarHoras2($prireg,$ultreg);
/*if($id==145){
echo $ultreg ." - ".$prireg." = ".$dursession[$cont2]. "<br \>";
}*/
}else{
//3 lineas de prueba
if($action=='logout' and $restahoras<3600){
$ultreg=$tmphora2;
$dursession[$cont2]=RestarHoras2($prireg,$ultreg);
}
/*if($id==145){
echo $tmphora2. " - ".$tmphora1." = ".$restahoras;
echo substr($restahoras,3,2)."-----> FAIL <br \>";
echo "FAIL->".$restahoras."<br \>";
}*/
$cont=0;
/*if($id==145){
echo $ultreg ." - ".$prireg." = ".$dursession[$cont2]. "<br \>";
}*/
$cont2++;
//echo "Contador=".$cont2."<br \>";
}
}
$tmphora1=$tmphora2;
}
 
}
$cont=0;
$sumahoras='000000';
while($cont<=$cont2){
$sumahoras=SumarHoras($sumahoras,$dursession[$cont]);
//echo $sumahoras."<br \>";
$cont++;
//echo "Contador=".$cont."<br \>";
}
return $sumahoras;
}

$tiempoconexion=CalculaTiempo(2);
echo $tiempoconexion;
?>

Promedio de valoraciones: -
En respuesta a Asier Ramos Martinez

Re: Ajax en Moodle

de Gabriel Dias -
Hola Asier, te comento, creo que va a ser dificil que consigas una respuesta de esta forma. Generalmente la gente no tiene tanto tiempo para ponerse a leer el codigo que posteaste y/o probarlo y la verdad es dificil que alguien te de una respuesta coherente.

Te pido entonces si podes tratar de mandar una parte del codigo en la que sospeches que esta el problema, pero no TODO el codigo. Ademas contamos si te tira algun tipo de error o algo que pueda ser util para poder ayudarte.

Saludos
En respuesta a Asier Ramos Martinez

Re: Ajax en Moodle

de Ivan Muñoz Mozo -
Asi a bote pronto falla aqui:

<script Xlanguage="JavaScript" type="text/javascript" src="ajax.js"></script>

No es Xlanguage sino language.

Yo acabo de probar un pequeño ejemplo en AJAX y utilizo lo siguiente:

ajax.js
function nuevoAjax()
{
var xmlhttp=false;
try
{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (E)
{
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined')
{
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

function cargarContenido()
{
contenedor = document.getElementById('ajax');

ajax=nuevoAjax();
ajax.open("GET", "holamundo.php");
ajax.onreadystatechange=function()
{
if (ajax.readyState==4)
{
contenedor.innerHTML = ajax.responseText;
}
}
ajax.send(null)
}

holamundo.php
<?php
echo "Hola Mundo";
?>

//Puedes utilizar html similar a esto
echo '<script language="JavaScript" src="ajax.js" type="text/javascript"></script>';
echo '<div id="ajax">Prueba</div>';
echo '<input type=button name="Ajax" onClick="javascript: cargarContenido();" />';

Espero que te sirva


En respuesta a Asier Ramos Martinez

Re: Ajax en Moodle

de David Monllaó -
Buenas Asier,

Moodle lleva una versión de la librería yui que tienen un componente (connection manager) que se encarga de conexiones asíncronas, así te ahorras mantener tus propias funciones de conexión.