Adding user session duration see BT#8317

1.9.x
Julio Montoya 11 years ago
parent a5ef11848a
commit c0e4ee509b
  1. 39
      main/admin/resume_session.php
  2. 58
      main/admin/session_user_edit.php
  3. 13
      main/inc/lib/display.lib.php
  4. 9
      main/inc/lib/main_api.lib.php
  5. 60
      main/inc/lib/sessionmanager.lib.php

@ -230,11 +230,23 @@ if ($multiple_url_is_on) {
echo '</td>';
echo '<td>';
$url_list = UrlManager::get_access_url_from_session($id_session);
foreach($url_list as $url_data) {
foreach ($url_list as $url_data) {
echo $url_data['url'].'<br />';
}
echo '</td></tr>';
}
if (SessionManager::durationPerUserIsEnabled()) {
$sessionInfo = api_get_session_info($id_session);
echo '<tr><td>';
echo get_lang('Duration');
echo '</td>';
echo '<td>';
echo $sessionInfo['duration'].' ';
echo get_lang('Days');
echo '</td></tr>';
}
?>
</table>
<br />
@ -387,11 +399,8 @@ $url .= Display::url(
"session_user_import.php?id_session=$id_session"
);
echo Display::page_subheader(get_lang('UserList').$url);
?>
<!--List of users -->
<table class="data_table">
<tr>
<th>
@ -444,15 +453,28 @@ if ($session['nbr_users']==0) {
$link_to_add_user_in_url = '<a href="resume_session.php?action=add_user_to_url&id_session='.$id_session.'&user_id='.$user['user_id'].'">'.$add.'</a>';
}
}
$editUrl = null;
if (SessionManager::durationPerUserIsEnabled()) {
if (isset($sessionInfo['duration']) && !empty($sessionInfo['duration'])) {
$editUrl = api_get_path(WEB_CODE_PATH) . 'admin/session_user_edit.php?session_id=' . $id_session . '&user_id=' . $user['user_id'];
$editUrl = Display::url(
Display::return_icon('edit.png', get_lang('Edit')),
$editUrl
);
}
}
echo '<tr>
<td width="90%">
<td width="80%">
'.$user_link.'
</td>
<td>
'.$editUrl.'
<a href="../mySpace/myStudents.php?student='.$user['user_id'].''.$orig_param.'">'.Display::return_icon('statistics.gif', get_lang('Reporting')).'</a>&nbsp;
<a href="session_course_user.php?id_user='.$user['user_id'].'&id_session='.$id_session.'">'.Display::return_icon('course.gif', get_lang('BlockCoursesForThisUser')).'</a>&nbsp;
<a href="'.api_get_self().'?id_session='.$id_session.'&action=delete&user='.$user['user_id'].'" onclick="javascript:if(!confirm(\''.get_lang('ConfirmYourChoice').'\')) return false;">'.Display::return_icon('delete.png', get_lang('Delete')).'</a>
'.$link_to_add_user_in_url.'
</td>
</tr>';
}
@ -460,11 +482,16 @@ if ($session['nbr_users']==0) {
?>
</table>
<?php
// footer
Display :: display_footer();
/*
ALTER TABLE session_rel_course ADD COLUMN position int;
ALTER TABLE session_rel_course ADD COLUMN category varchar(255);
https://task.beeznest.com/issues/8317:
ALTER TABLE session ADD COLUMN duration int;
ALTER TABLE session_rel_user ADD COLUMN duration int;
*
*/

@ -0,0 +1,58 @@
<?php
/* For licensing terms, see /license.txt */
$language_file = 'admin';
$cidReset = true;
// including the global Chamilo file
require_once '../inc/global.inc.php';
api_protect_admin_script(true);
$sessionId = isset($_GET['session_id']) ? $_GET['session_id'] : null;
$userId = isset($_GET['user_id']) ? $_GET['user_id'] : null;
SessionManager::protect_session_edit($sessionId);
$sessionInfo = api_get_session_info($sessionId);
if (empty($sessionInfo)) {
api_not_allowed(true);
}
if (!isset($sessionInfo['duration']) ||
isset($sessionInfo['duration']) && empty($sessionInfo['duration'])) {
api_not_allowed(true);
}
if (!SessionManager::durationPerUserIsEnabled()) {
api_not_allowed(true);
}
if (empty($sessionId) || empty($userId)) {
api_not_allowed(true);
}
$interbreadcrumb[] = array('url' => 'index.php', 'name' => get_lang('PlatformAdmin'));
$interbreadcrumb[] = array('url' => 'session_list.php','name' => get_lang('SessionList'));
$interbreadcrumb[] = array('url' => "resume_session.php?id_session=".$sessionId, "name" => get_lang('SessionOverview'));
$form = new FormValidator('edit', 'post', api_get_self().'?session_id='.$sessionId.'&user_id='.$userId);
$form->add_header(get_lang('EditUserSessionDuration'));
$data = SessionManager::getUserSession($userId, $sessionId);
$form->addElement('text', 'duration', array(get_lang('Duration'), null, get_lang('Days')));
$form->addElement('button', 'submit', get_lang('Send'));
$form->setDefaults($data);
$message = null;
if ($form->validate()) {
$duration = $form->getSubmitValue('duration');
SessionManager::editUserSessionDuration($duration, $userId, $sessionId);
$message = Display::return_message(get_lang('ItemUpdated'), 'confirmation');
}
// display the header
Display::display_header(get_lang('Edit'));
echo $message;
$form->display();
Display :: display_footer();

@ -1389,7 +1389,18 @@ class Display
$session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($session_info['firstname'], $session_info['lastname']);
}
if (isset($session_info['duration']) && !empty($session_info['duration'])) {
$daysLeft = SessionManager::getDayLeftInSession($session_id, api_get_user_id(), $session_info['duration']);
$userDurationData = SessionManager::getUserSession(
api_get_user_id(),
$session_id
);
$totalDuration = $session_info['duration'] + intval($userDurationData['duration']);
$daysLeft = SessionManager::getDayLeftInSession(
$session_id,
api_get_user_id(),
$totalDuration
);
$session['duration'] = sprintf(get_lang('SessionDurationXDaysLeft'), $daysLeft);
}
$active = true;

@ -2026,7 +2026,14 @@ function api_get_session_visibility($session_id, $course_code = null, $ignore_vi
);
$currentTime = time();
$firstAccess = api_strtotime($courseAccess['login_course_date'], 'UTC');
if (($firstAccess + $duration) > $currentTime) {
$userDurationData = SessionManager::getUserSession(
api_get_user_id(),
$session_id
);
$userDuration = intval($userDurationData['duration'])*24*60*60;
$totalDuration = $firstAccess + $duration + $userDuration;
if ($totalDuration > $currentTime) {
return SESSION_AVAILABLE;
} else {
return SESSION_INVISIBLE;

@ -4666,7 +4666,9 @@ class SessionManager
/**
* Use the session duration to allow/block user access see BT#8317
* Needs "ALTER TABLE session ADD COLUMN duration int;"
* Needs these DB changes
* ALTER TABLE session ADD COLUMN duration int;
* ALTER TABLE session_rel_user ADD COLUMN duration int;
*/
public static function durationPerUserIsEnabled()
{
@ -4683,24 +4685,70 @@ class SessionManager
/**
* @param int $userId
* @param int $sessionId
* @param int $duration in days
* @return int
*/
public function getDayLeftInSession($sessionId, $userId, $duration)
public static function getDayLeftInSession($sessionId, $userId, $duration)
{
$courseAccess = CourseManager::getFirstCourseAccessPerSessionAndUser(
$sessionId,
$userId
);
$currentTime = time();
$firstAccess = api_strtotime($courseAccess['login_course_date'], 'UTC');
//var_dump(api_get_utc_datetime($firstAccess));
//var_dump($duration);
$endDateInSeconds = $firstAccess + $duration*24*60*60;
$leftDays = round(($endDateInSeconds- $currentTime) / 60 / 60 / 24);
/*var_dump(api_get_utc_datetime($endDateInSeconds));
var_dump(api_get_utc_datetime($currentTime));*/
return $leftDays;
}
/**
* @param int $duration
* @param int $userId
* @param int $sessionId
*/
public static function editUserSessionDuration($duration, $userId, $sessionId)
{
$duration = intval($duration);
$userId = intval($userId);
$sessionId = intval($sessionId);
if (empty($userId) || empty($sessionId)) {
return false;
}
$table = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$parameters = array('duration' => $duration);
$where = array('id_session = ? AND id_user = ? ' => array($sessionId, $userId));
Database::update($table, $parameters, $where);
}
/**
* @param int $userId
* @param int $sessionId
*
* @param return array
*/
public static function getUserSession($userId, $sessionId)
{
$userId = intval($userId);
$sessionId = intval($sessionId);
if (empty($userId) || empty($sessionId)) {
return false;
}
$table = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$sql = "SELECT * FROM $table WHERE id_session =$sessionId AND id_user = $userId";
$result = Database::query($sql);
$values = array();
if (Database::num_rows($result)) {
$values = Database::fetch_array($result, 'ASSOC');
}
return $values;
}
}

Loading…
Cancel
Save