Fix session visibility for coaches.

1.10.x
Julio Montoya 10 years ago
parent 9728351e51
commit 72985e904a
  1. 5
      main/inc/lib/api.lib.php
  2. 136
      main/inc/lib/course.lib.php
  3. 45
      main/inc/lib/sessionmanager.lib.php
  4. 12
      main/inc/lib/usermanager.lib.php
  5. 17
      main/inc/lib/userportal.lib.php

@ -2230,7 +2230,7 @@ function api_get_session_visibility(
// Session duration per student.
if (isset($row['duration']) && !empty($row['duration'])) {
$duration = $row['duration']*24*60*60;
$duration = $row['duration'] * 24 * 60 * 60;
$courseAccess = CourseManager::getFirstCourseAccessPerSessionAndUser(
$session_id,
@ -2780,11 +2780,12 @@ function api_is_coach($session_id = 0, $courseId = null, $check_student_view = t
} else {
$courseId = api_get_course_int_id();
}
$session_table = Database::get_main_table(TABLE_MAIN_SESSION);
$session_rel_course_rel_user_table = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$sessionIsCoach = null;
if (!empty($course_code)) {
if (!empty($courseId)) {
$sql = "SELECT DISTINCT s.id, name, access_start_date, access_end_date
FROM $session_table s
INNER JOIN $session_rel_course_rel_user_table session_rc_ru

@ -3858,33 +3858,16 @@ class CourseManager
$session_accessible = true,
$load_dirs = false
) {
global $nosession;
$user_id = api_get_user_id();
$course_info = api_get_course_info_by_id($course['real_id']);
$status_course = CourseManager::get_user_in_course_status($user_id, $course_info['code']);
$course_info['status'] = empty($session_id) ? $status_course : STUDENT;
$course_info['id_session'] = $session_id;
if (!$nosession) {
global $now, $date_start, $date_end;
}
if (empty($date_start) or empty($date_end)) {
$sess = SessionManager::get_sessions_list(
array(
's.id' => array(
'operator' => '=',
'value' => $course_info['id_session'],
),
)
);
$date_start = $sess[$course_info['id_session']]['access_start_date'];
$date_end = $sess[$course_info['id_session']]['access_end_date'];
}
if (empty($now)) {
// maybe use api_get_utcdate() here?
$now = date('Y-m-d h:i:s');
}
/*$date_start = $sess[$course_info['id_session']]['access_start_date'];
$date_end = $sess[$course_info['id_session']]['access_end_date'];*/
$now = date('Y-m-d h:i:s');
// Table definitions
$main_user_table = Database:: get_main_table(TABLE_MAIN_USER);
@ -3917,37 +3900,36 @@ class CourseManager
array(),
ICON_SIZE_LARGE
);
// Display the "what's new" icons
$notifications = '';
if ($course_visibility != COURSE_VISIBILITY_CLOSED && $course_visibility != COURSE_VISIBILITY_HIDDEN) {
$notifications .= Display:: show_notification($course_info);
}
if ($session_accessible) {
if ($course_visibility != COURSE_VISIBILITY_CLOSED ||
$user_in_course_status == COURSEMANAGER
) {
if (!$nosession) {
if (empty($course_info['id_session'])) {
$course_info['id_session'] = 0;
}
if (empty($course_info['id_session'])) {
$course_info['id_session'] = 0;
}
$sessionCourseAvailable = false;
$sessionCourseStatus = api_get_session_visibility($session_id, $course_info['id']);
if (in_array($sessionCourseStatus,
array(SESSION_VISIBLE_READ_ONLY, SESSION_VISIBLE, SESSION_AVAILABLE))) {
$sessionCourseAvailable = true;
}
$sessionCourseAvailable = false;
$sessionCourseStatus = api_get_session_visibility($session_id, $course_info['real_id']);
if ($user_in_course_status == COURSEMANAGER || $sessionCourseAvailable) {
$session_url = api_get_path(WEB_COURSE_PATH) . $course_info['path'] . '/?id_session=' . $course_info['id_session'];
$session_title = '<h4><a href="' . api_get_path(WEB_COURSE_PATH) . $course_info['path'] . '/?id_session=' . $course_info['id_session'] . '">'. $course_info['name'] . '</a>'.$notifications.'</h4>';
} else {
$session_title = $course_info['name'];
}
if (in_array($sessionCourseStatus,
array(SESSION_VISIBLE_READ_ONLY, SESSION_VISIBLE, SESSION_AVAILABLE))) {
$sessionCourseAvailable = true;
}
if ($user_in_course_status == COURSEMANAGER || $sessionCourseAvailable) {
$session_url = api_get_path(WEB_COURSE_PATH) . $course_info['path'] . '/?id_session=' . $course_info['id_session'];
$session_title = '<h4><a href="' . api_get_path(WEB_COURSE_PATH) . $course_info['path'] . '/?id_session=' . $course_info['id_session'] . '">'. $course_info['name'] . '</a>'.$notifications.'</h4>';
} else {
$session_url = api_get_path(WEB_COURSE_PATH) . $course_info['path'] . '/';
$session_title = '<h4><a href="' . api_get_path(WEB_COURSE_PATH) . $course_info['path'] . '/">' . $course_info['name'] . '</a>'.$notifications.'</h4>';
$session_title = $course_info['name'];
}
} else {
$session_title = $course_info['name'] . ' ' . Display::tag('span', get_lang('CourseClosed'),
array('class' => 'item_closed'));
@ -3974,12 +3956,16 @@ class CourseManager
$course_visibility != COURSE_VISIBILITY_HIDDEN
) {
if ($load_dirs) {
$params['right_actions'] .= '<a id="document_preview_' . $course_info['real_id'] . '_' . $course_info['id_session'] . '" class="document_preview" href="javascript:void(0);">' . Display::return_icon('folder.png',
get_lang('Documents'), array('align' => 'absmiddle'), ICON_SIZE_SMALL) . '</a>';
$params['right_actions'] .= '<a id="document_preview_' . $course_info['real_id'] . '_' . $course_info['id_session'] . '" class="document_preview" href="javascript:void(0);">' .
Display::return_icon('folder.png',
get_lang('Documents'),
array('align' => 'absmiddle'),
ICON_SIZE_SMALL
) . '</a>';
$params['right_actions'] .= Display::div('', array(
'id' => 'document_result_' . $course_info['real_id'] . '_' . $course_info['id_session'],
'class' => 'document_preview_container'
));
'id' => 'document_result_' . $course_info['real_id'] . '_' . $course_info['id_session'],
'class' => 'document_preview_container'
));
}
}
@ -3988,34 +3974,36 @@ class CourseManager
}
if (api_get_setting('display_teacher_in_courselist') == 'true') {
$teacher_list = null;
if (!$nosession) {
$teacher_list = CourseManager::get_teacher_list_from_course_code_to_string(
$course_info['code'],
self::USER_SEPARATOR,
true
);
$course_coachs = CourseManager::get_coachs_from_course_to_string(
$course_info['id_session'],
$course_info['real_id'],
self::USER_SEPARATOR,
true
);
$icon_coachs = Display::return_icon('teacher.png','',null,ICON_SIZE_TINY);
if ($course_info['status'] == COURSEMANAGER || ($course_info['status'] == STUDENT && empty($course_info['id_session'])) || empty($course_info['status'])) {
$params['teachers'] = $teacher_list;
}
if (($course_info['status'] == STUDENT && !empty($course_info['id_session'])) || ($is_coach && $course_info['status'] != COURSEMANAGER)) {
$params['coaches'] = $icon_coachs.$course_coachs;
}
} else {
$teacher_list = CourseManager::get_teacher_list_from_course_code_to_string(
$course_info['code'],
self::USER_SEPARATOR,
true
);
$course_coachs = CourseManager::get_coachs_from_course_to_string(
$course_info['id_session'],
$course_info['real_id'],
self::USER_SEPARATOR,
true
);
$icon_coachs = Display::return_icon('teacher.png', '', null, ICON_SIZE_TINY);
if ($course_info['status'] == COURSEMANAGER ||
($course_info['status'] == STUDENT && empty($course_info['id_session'])) ||
empty($course_info['status'])
) {
$params['teachers'] = $teacher_list;
}
if (($course_info['status'] == STUDENT && !empty($course_info['id_session'])) ||
($is_coach && $course_info['status'] != COURSEMANAGER)
) {
$params['coaches'] = $icon_coachs.$course_coachs;
}
}
$session_title .= isset($course['special_course']) ? ' ' . Display::return_icon('klipper.png',
get_lang('CourseAutoRegister')) : '';
$session_title .= isset($course['special_course']) ? ' ' .
Display::return_icon('klipper.png', get_lang('CourseAutoRegister')) : '';
$params['title'] = $session_title;
$params['extra'] = '';
@ -4023,18 +4011,20 @@ class CourseManager
$html = self::session_items_html($params, true);
$session_category_id = null;
if (!$nosession) {
if (1) {
$session = '';
$active = false;
if (!empty($course_info['session_name'])) {
// Request for the name of the general coach
$sql = 'SELECT lastname, firstname,sc.name
FROM ' . $tbl_session . ' ts
LEFT JOIN ' . $main_user_table . ' tu
ON ts.id_coach = tu.user_id
INNER JOIN ' . $tbl_session_category . ' sc ON ts.session_category_id = sc.id
WHERE ts.id=' . (int)$course_info['id_session'] . ' LIMIT 1';
FROM ' . $tbl_session . ' ts
LEFT JOIN ' . $main_user_table . ' tu
ON ts.id_coach = tu.user_id
INNER JOIN ' . $tbl_session_category . ' sc
ON ts.session_category_id = sc.id
WHERE ts.id=' . (int)$course_info['id_session'] . '
LIMIT 1';
$rs = Database::query($sql);
$sessioncoach = Database::store_result($rs);

@ -6266,9 +6266,9 @@ class SessionManager
$orderClause .= api_sort_by_first_name() ? "firstname, lastname, username" : "lastname, firstname, username";
$sql = "SELECT user_id, lastname, firstname, username
FROM $tbl_user
WHERE status = '1' ".
$orderClause;
FROM $tbl_user
WHERE status = '1' ".
$orderClause;
if (api_is_multiple_url_enabled()) {
$userRelAccessUrlTable = Database::get_main_table(
@ -6383,6 +6383,26 @@ class SessionManager
$form->addElement('html', '<div id="date_fields" style="display:none">');
// Dates
$form->addDateTimePicker(
'access_start_date',
array(get_lang('SessionStartDate'), get_lang('SessionStartDateComment')),
array('id' => 'access_start_date')
);
$form->addDateTimePicker(
'access_end_date',
array(get_lang('SessionEndDate'), get_lang('SessionEndDateComment')),
array('id' => 'access_end_date')
);
$form->addRule(
array('access_start_date', 'access_end_date'),
get_lang('StartDateMustBeBeforeTheEndDate'),
'compare_datetime_text',
'< allow_empty'
);
$form->addDateTimePicker(
'display_start_date',
array(
@ -6407,25 +6427,6 @@ class SessionManager
'< allow_empty'
);
$form->addDateTimePicker(
'access_start_date',
array(get_lang('SessionStartDate'), get_lang('SessionStartDateComment')),
array('id' => 'access_start_date')
);
$form->addDateTimePicker(
'access_end_date',
array(get_lang('SessionEndDate'), get_lang('SessionEndDateComment')),
array('id' => 'access_end_date')
);
$form->addRule(
array('access_start_date', 'access_end_date'),
get_lang('StartDateMustBeBeforeTheEndDate'),
'compare_datetime_text',
'< allow_empty'
);
$form->addDateTimePicker(
'coach_access_start_date',
array(

@ -2298,7 +2298,6 @@ class UserManager
session_category.date_end session_category_date_end,
coach_access_start_date,
coach_access_end_date
FROM $tbl_session as session
LEFT JOIN $tbl_session_category session_category
ON (session_category_id = session_category.id)
@ -2314,19 +2313,20 @@ class UserManager
$categories = array();
if (Database::num_rows($result) > 0) {
while ($row = Database::fetch_array($result)) {
while ($row = Database::fetch_array($result, 'ASSOC')) {
// User portal filters:
if ($is_time_over) {
// History
if (isset($row['access_end_date']) && $row['access_end_date'] != '0000-00-00 00:00:00') {
if (empty($row['access_end_date']) || $row['access_end_date'] == '0000-00-00 00:00:00') {
continue;
}
if (isset($row['access_end_date'])) {
if ($row['access_end_date'] > $now) {
continue;
}
}
if ($row['access_end_date'] == '0000-00-00 00:00:00') {
continue;
}
} else {
// Current user portal

@ -1150,6 +1150,7 @@ class IndexManager
) {
// Independent sessions
foreach ($session_category['sessions'] as $session) {
$session_id = $session['session_id'];
// Don't show empty sessions.
@ -1160,7 +1161,7 @@ class IndexManager
// Courses inside the current session.
$date_session_start = $session['access_start_date'];
$date_session_end = $session['access_end_date'];
$coachAccessStartDate = $session['coach_access_start_date'];
$coachAccessStartDate = $session['coach_access_start_date'];
$coachAccessEndDate = $session['coach_access_end_date'];
$session_now = time();
@ -1174,14 +1175,20 @@ class IndexManager
$is_coach_course = api_is_coach($session_id, $course['real_id']);
$allowed_time = 0;
$dif_time_after = 0;
if ($date_session_start != '0000-00-00 00:00:00') {
if (!empty($date_session_start) &&
$date_session_start != '0000-00-00 00:00:00'
) {
if ($is_coach_course) {
$allowed_time = api_strtotime($coachAccessStartDate);
} else {
$allowed_time = api_strtotime($date_session_start);
}
if (!isset($_GET['history'])) {
if ($date_session_end != '0000-00-00 00:00:00') {
if (!empty($date_session_end) &&
$date_session_end != '0000-00-00 00:00:00'
) {
$endSessionToTms = api_strtotime($date_session_end);
if ($session_now > $endSessionToTms) {
$dif_time_after = $session_now - $endSessionToTms;
@ -1191,8 +1198,8 @@ class IndexManager
}
}
if ($session_now > $allowed_time &&
$coachAccessEndDate > $dif_time_after - 1
if ($session_now > $allowed_time
//($coachAccessEndDate > $dif_time_after - 1)
) {
// Read only and accessible.
$atLeastOneCourseIsVisible = true;

Loading…
Cancel
Save