File: /var/www/html/gmartinmartin.sumar.com.py-2/tiempos13.php
<?php
// Incluimos la configuración y el entorno de Moodle
require_once(__DIR__ . '/config.php');
// Verifica que el usuario tiene los permisos necesarios (solo administradores, por ejemplo)
require_login();
if (!is_siteadmin()) {
echo "No tienes permisos suficientes para acceder a esta información.";
exit;
}
// Obtener las fechas de inicio y fin del formulario (si están definidas)
$startdate = optional_param('startdate', 0, PARAM_INT);
$enddate = optional_param('enddate', 0, PARAM_INT);
// Si no se han definido las fechas, mostramos todos los datos
if ($startdate == 0 && $enddate == 0) {
$startdate = 0; // Sin filtro de fecha de inicio
$enddate = time(); // Fecha actual
}
// Convertimos las fechas a formato timestamp si es necesario
if ($startdate != 0) {
$startdate = strtotime($startdate);
}
if ($enddate != 0) {
$enddate = strtotime($enddate);
}
// Mostrar el formulario para ingresar las fechas de inicio y fin
echo '<form method="get" action="">';
echo 'Fecha de inicio: <input type="date" name="startdate" value="' . date('Y-m-d', $startdate) . '">';
echo 'Fecha de fin: <input type="date" name="enddate" value="' . date('Y-m-d', $enddate) . '">';
echo '<input type="submit" value="Filtrar">';
echo '</form>';
// Consulta para obtener todos los eventos de los usuarios en la tabla logstore_standard_log con el filtro por fecha
global $DB, $USER;
$sql = "
SELECT u.id AS user_id, u.firstname, u.lastname, u.username, l.action, l.timecreated
FROM {logstore_standard_log} l
JOIN {user} u ON u.id = l.userid
WHERE (l.action = 'loggedin' OR l.action = 'loggedout')
";
$params = [];
// Solo agregamos los filtros de fecha si se han establecido
if ($startdate != 0 && $enddate != 0) {
$sql .= " AND l.timecreated BETWEEN :startdate AND :enddate";
$params['startdate'] = $startdate;
$params['enddate'] = $enddate;
}
$sql .= " ORDER BY l.userid, l.timecreated";
$records = $DB->get_recordset_sql($sql, $params);
// Verificar si se obtuvieron registros
if (empty($records)) {
echo "No se encontraron registros de actividad.";
exit;
}
// Inicializamos las variables para almacenar el tiempo por usuario
$users_times = [];
$current_session_start = null;
$current_user_id = null;
$last_activity_time = null;
// Iterar sobre los registros y calcular las sesiones
foreach ($records as $record) {
$user_id = $record->user_id;
// Si encontramos un nuevo login (verificar si 'action' tiene el nombre correcto)
if ($record->action == 'loggedin') { // Este es el evento de login
// Si ya tenemos una sesión previa, sumamos el tiempo hasta el último evento de actividad
if ($current_session_start !== null && $last_activity_time !== null && $current_user_id == $user_id) {
$session_duration = $last_activity_time - $current_session_start; // Duración en segundos
if (!isset($users_times[$user_id])) {
$users_times[$user_id] = 0;
}
$users_times[$user_id] += $session_duration; // Sumar al total de tiempo del usuario
}
// Iniciar una nueva sesión con el evento de login
$current_session_start = $record->timecreated;
$last_activity_time = $record->timecreated; // Inicializamos la actividad
$current_user_id = $user_id;
} else {
// Si no es un login, es una actividad del usuario, actualizamos el último evento de actividad
if ($current_user_id == $user_id) {
$last_activity_time = $record->timecreated;
}
}
}
// Al final, si hay una sesión activa sin un login posterior, la cerramos usando el último evento de actividad
if ($current_session_start !== null && $last_activity_time !== null && $current_user_id !== null) {
$session_duration = $last_activity_time - $current_session_start; // Duración en segundos
if (!isset($users_times[$current_user_id])) {
$users_times[$current_user_id] = 0;
}
$users_times[$current_user_id] += $session_duration; // Sumar al total de tiempo del usuario
}
// Mostrar los resultados en una tabla
echo "<h2>Usuarios y sus tiempos de conexión (entre " . date('d-m-Y', $startdate) . " y " . date('d-m-Y', $enddate) . ")</h2>";
echo "<table border='1'>";
echo "<tr><th>Usuario</th><th>Nombre</th><th>Total Tiempo Conectado (minutos)</th></tr>";
foreach ($users_times as $user_id => $total_time) {
// Traer el nombre completo del usuario
$user = $DB->get_record('user', ['id' => $user_id]);
// Verificar si se pudo obtener el usuario
if ($user) {
// Convertir el tiempo total a minutos
$total_minutes = round($total_time / 60); // Convertir segundos a minutos
// Mostrar el tiempo total conectado para el usuario
echo "<tr>
<td>{$user->username}</td>
<td>{$user->firstname} {$user->lastname}</td>
<td>{$total_minutes} minutos</td>
</tr>";
}
}
echo "</table>";
// Exportar los resultados a Excel
echo '<form method="post" action="export_to_excel.php">';
echo '<input type="hidden" name="startdate" value="' . $startdate . '">';
echo '<input type="hidden" name="enddate" value="' . $enddate . '">';
echo '<input type="submit" value="Exportar a Excel">';
echo '</form>';
?>