Skip to content

Sistema de suscripción a sesiones con posibilidad de extensión de duración por usuario #5638

Closed
@juancpbinario

Description

@juancpbinario

Actualmente la sesiones se pueden configurar por una duración de días, según se inscribe un alumno en la sesión este podrá acceder desde la fecha de primer acceso hasta el máximo de días que tenga configurada como duración la sesión.

imagen

Esto se controla a través de la tabla "session" donde tenemos el campo "duration"

imagen

El problema que nos encontramos es que no es posible "extender" la duración de los usuarios, se tendría que quitar y volver agregar al alumno en la sesión, perdiendo el progreso, o hacer una trampa modificando los registros en la base de datos, pero esto sería algo que quedaría fuera del alcance de los tutores.

En un principio estábamos planteado extender la funcionalidad de las suscripciones actuales para poder extender el tiempo de sesión por usuario, pero nos encontramos en la tabla "session_rel_user" un campo con nombre "duration" que no se estaba usando

imagen

Revisando el código para verificar que no se estaba usando se ha encontrado código en desuso que apuntaba a que en el pasado existió esta funcionalidad, por ejemplo estas funciones para comprobar, concretamente

/**
* Use the session duration to allow/block user access see BT#8317
* Needs these DB changes
* ALTER TABLE session ADD COLUMN duration int;
* ALTER TABLE session_rel_user ADD COLUMN duration int;.
*/
public static function durationPerUserIsEnabled()
{
return api_get_configuration_value('session_duration_feature');
}

/**
* Returns the number of days the student has left in a session when using
* sessions durations.
*
* @param int $userId
*
* @return int
*/
public static function getDayLeftInSession(array $sessionInfo, $userId)
{
$sessionId = $sessionInfo['id'];
$subscription = self::getUserSession($userId, $sessionId);
$duration = empty($subscription['duration'])
? $sessionInfo['duration']
: $sessionInfo['duration'] + $subscription['duration'];
// Get an array with the details of the first access of the student to
// this session
$courseAccess = CourseManager::getFirstCourseAccessPerSessionAndUser(
$sessionId,
$userId
);
$currentTime = time();
// If no previous access, return false
if (count($courseAccess) == 0) {
return $duration;
}
$firstAccess = api_strtotime($courseAccess['login_course_date'], 'UTC');
$endDateInSeconds = $firstAccess + $duration * 24 * 60 * 60;
$leftDays = round(($endDateInSeconds - $currentTime) / 60 / 60 / 24);
return $leftDays;
}

/**
* @param int $duration
* @param int $userId
* @param int $sessionId
*
* @return bool
*/
public static function editUserSessionDuration($duration, $userId, $sessionId)
{
$duration = (int) $duration;
$userId = (int) $userId;
$sessionId = (int) $sessionId;
if (empty($userId) || empty($sessionId)) {
return false;
}
$table = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$parameters = ['duration' => $duration];
$where = ['session_id = ? AND user_id = ? ' => [$sessionId, $userId]];
Database::update($table, $parameters, $where);
return true;
}

También se localiza que en el listado de usuarios en el resumen de sesiones hubo en algún momento una opción para modificar y permitir extender los días de acceso por usuario a través de main/session/session_user_edit.php

/*
if (isset($sessionInfo['duration']) && !empty($sessionInfo['duration'])) {
$editUrl = $codePath . 'session/session_user_edit.php?session_id=' . $sessionId . '&user_id=' . $userId;
$editUrl = Display::url(
Display::return_icon('agenda.png', get_lang('SessionDurationEdit')),
$editUrl
);
}*/

Qué fue comentado en 2016: e0e55b7

La pregunta sería viendo que no se usa el campo "duration" de "session_rel_user" podriamos usarlo para volver implementar esta funcionalidad con los cambios necesarios?

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions