Should fix bug that enables a teacher to enter a course

skala
Julio Montoya 14 years ago
parent ff8714c698
commit c3bf94544b
  1. 58
      main/inc/lib/main_api.lib.php
  2. 19
      main/inc/local.inc.php

@ -1773,22 +1773,18 @@ function api_get_session_info($session_id) {
*/ */
function api_get_session_visibility($session_id) { function api_get_session_visibility($session_id) {
$visibility = 0; //means that the session is still available $visibility = 0; //means that the session is still available
if (api_is_platform_admin()) {
return SESSION_AVAILABLE;
}
if (!empty($session_id)) { if (!empty($session_id)) {
$session_id = intval($session_id); $session_id = intval($session_id);
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$is_coach = api_is_coach(); $sql = "SELECT visibility, date_start, date_end, nb_days_access_after_end, nb_days_access_before_beginning FROM $tbl_session
$condition_date_end = ""; WHERE id = $session_id ";
if ($is_coach) {
//@todo use api_get_utc_datetime()
$condition_date_end = " AND (CURDATE() > (SELECT adddate(date_end,nb_days_access_after_end) FROM $tbl_session WHERE id = $session_id) AND date_end != '0000-00-00') ";
} else {
$condition_date_end = " ";
}
$sql = "SELECT visibility, date_start, date_end FROM $tbl_session
WHERE id = $session_id $condition_date_end ";
$result = Database::query($sql); $result = Database::query($sql);
if (Database::num_rows($result) > 0 ) { if (Database::num_rows($result) > 0 ) {
@ -1797,7 +1793,7 @@ function api_get_session_visibility($session_id) {
//I don't care the field visibility //I don't care the field visibility
if ($row['date_start'] == '0000-00-00' && $row['date_end'] == '0000-00-00') { if ($row['date_start'] == '0000-00-00' && $row['date_end'] == '0000-00-00') {
$visibility = SESSION_AVAILABLE; return SESSION_AVAILABLE;
} else { } else {
$time = time(); $time = time();
@ -1830,6 +1826,42 @@ function api_get_session_visibility($session_id) {
} }
} }
} }
//If I'm a coach the visibility can change in my favor depending in the nb_days_access_after_end and nb_days_access_before_beginning values
$is_coach = api_is_coach();
if ($is_coach) {
//Test end date
if (isset($row['date_end']) && !empty($row['date_end']) && $row['date_end'] != '0000-00-00' && $row['nb_days_access_after_end'] != '0') {
$end_date_for_coach = new DateTime($row['date_end']);
$number_of_days = "P".intval($row['nb_days_access_after_end']).'D';
$end_date_for_coach->add(new DateInterval($number_of_days));
$today = new DateTime();
if ($end_date_for_coach >= $today) {
$visibility = SESSION_AVAILABLE;
} else {
$visibility = SESSION_INVISIBLE;
}
}
//Test start date
if (isset($row['date_start']) && !empty($row['date_start']) && $row['date_start'] != '0000-00-00' && $row['nb_days_access_before_beginning'] != '0') {
$start_date_for_coach = new DateTime($row['date_start']);
$number_of_days = "P".intval($row['nb_days_access_before_beginning']).'D';
$start_date_for_coach->sub(new DateInterval($number_of_days));
$today = new DateTime();
if ($start_date_for_coach < $today) {
$visibility = SESSION_AVAILABLE;
} else {
$visibility = SESSION_INVISIBLE;
}
}
}
} else { } else {
$visibility = SESSION_INVISIBLE; $visibility = SESSION_INVISIBLE;
} }
@ -2155,13 +2187,13 @@ function api_is_coach($session_id = 0, $course_code = '') {
$session_table = Database::get_main_table(TABLE_MAIN_SESSION); $session_table = Database::get_main_table(TABLE_MAIN_SESSION);
$session_rel_course_rel_user_table = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); $session_rel_course_rel_user_table = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$sessionIsCoach = null; $sessionIsCoach = null;
if (!empty($course_code)) { if (!empty($course_code)) {
$sql = "SELECT DISTINCT id, name, date_start, date_end $sql = "SELECT DISTINCT id, name, date_start, date_end
FROM $session_table INNER JOIN $session_rel_course_rel_user_table session_rc_ru FROM $session_table INNER JOIN $session_rel_course_rel_user_table session_rc_ru
ON session_rc_ru.id_user = '".api_get_user_id()."' ON session_rc_ru.id_user = '".api_get_user_id()."'
WHERE session_rc_ru.course_code = '$course_code' AND session_rc_ru.status = 2 AND session_rc_ru.id_session = '$session_id'"; WHERE session_rc_ru.course_code = '$course_code' AND session_rc_ru.status = 2 AND session_rc_ru.id_session = '$session_id'";
$result = Database::query($sql); $result = Database::query($sql);
$sessionIsCoach = Database::store_result($result); $sessionIsCoach = Database::store_result($result);
} }

@ -917,7 +917,6 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) {
//We are in a session course? Check session permissions //We are in a session course? Check session permissions
if (!empty($session_id)) { if (!empty($session_id)) {
//I'm not the teacher of the course //I'm not the teacher of the course
if ($is_courseAdmin == false) { if ($is_courseAdmin == false) {
// this user has no status related to this course // this user has no status related to this course
@ -1046,12 +1045,12 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) {
// check the session visibility // check the session visibility
if ($is_allowed_in_course == true) { if ($is_allowed_in_course == true) {
//if I'm in a session
//if I'm in a session
if ($session_id != 0) { if ($session_id != 0) {
if (!$is_platformAdmin) { if (!$is_platformAdmin) {
// admin and session coach are *not* affected to the invisible session mode // admin is not affected to the invisible session mode
// the coach is not affected because he can log in some days after the end date of a session
$session_visibility = api_get_session_visibility($session_id); $session_visibility = api_get_session_visibility($session_id);
switch ($session_visibility) { switch ($session_visibility) {
@ -1065,13 +1064,13 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) {
} }
// save the states // save the states
Session::write('is_courseAdmin',$is_courseAdmin); Session::write('is_courseAdmin', $is_courseAdmin);
Session::write('is_courseMember',$is_courseMember); Session::write('is_courseMember', $is_courseMember);
Session::write('is_courseTutor',$is_courseTutor); Session::write('is_courseTutor', $is_courseTutor);
Session::write('is_courseCoach',$is_courseCoach); Session::write('is_courseCoach', $is_courseCoach);
Session::write('is_allowed_in_course',$is_allowed_in_course); Session::write('is_allowed_in_course', $is_allowed_in_course);
Session::write('is_sessionAdmin',$is_sessionAdmin); Session::write('is_sessionAdmin', $is_sessionAdmin);
} else { // continue with the previous values } else { // continue with the previous values
if (isset($_SESSION ['_courseUser'])) { if (isset($_SESSION ['_courseUser'])) {

Loading…
Cancel
Save