diff --git a/main/auth/courses_controller.php b/main/auth/courses_controller.php index 30b7150b45..23d25d1dfa 100755 --- a/main/auth/courses_controller.php +++ b/main/auth/courses_controller.php @@ -578,6 +578,8 @@ class CoursesController } foreach ($sessions as $session) { + $sessionDates = SessionManager::parseSessionDates($session); + $sessionsBlock = array( 'id' => $session['id'], 'name' => $session['name'], @@ -586,7 +588,7 @@ class CoursesController 'coach_name' => $session['coach_name'], 'is_subscribed' => $session['is_subscribed'], 'icon' => $this->getSessionIcon($session['name']), - 'date' => SessionManager::getSessionFormattedDate($session), + 'date' => $sessionDates['display'], 'subscribe_button' => $this->getRegisteredInSessionButton( $session[$key], $catalogSessionAutoSubscriptionAllowed diff --git a/main/cron/remind_course_expiration.php b/main/cron/remind_course_expiration.php index 39792100ca..24761abc5a 100644 --- a/main/cron/remind_course_expiration.php +++ b/main/cron/remind_course_expiration.php @@ -19,13 +19,16 @@ define("OFFSET", 2); $today = gmdate("Y-m-d"); $expirationDate = gmdate("Y-m-d", strtotime($today." + ".OFFSET." day")); -$query = "SELECT DISTINCT category.session_id, certificate.user_id FROM ". - Database::get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY)." AS category - LEFT JOIN ".Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE). - " AS certificate ON category.id = certificate.cat_id - INNER JOIN ".Database::get_main_table(TABLE_MAIN_SESSION). - " AS session ON category.session_id = session.id - WHERE session.date_end BETWEEN '$today' AND '$expirationDate' AND category.session_id IS NOT NULL"; +$query = "SELECT DISTINCT category.session_id, certificate.user_id + FROM ".Database::get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY)." AS category + LEFT JOIN ".Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE)." AS certificate + ON category.id = certificate.cat_id + INNER JOIN ".Database::get_main_table(TABLE_MAIN_SESSION)." AS session + ON category.session_id = session.id + WHERE + session.access_end_date BETWEEN '$today' AND + '$expirationDate' AND + category.session_id IS NOT NULL"; $sessionId = 0; $userIds = array(); @@ -48,7 +51,7 @@ $usersToBeReminded = array(); foreach ($sessions as $sessionId => $userIds) { $userId = 0; $userIds = $userIds ? " AND sessionUser.user_id NOT IN (".implode(",", $userIds).")" : null; - $query = "SELECT sessionUser.session_id, sessionUser.user_id, session.name, session.date_end FROM ". + $query = "SELECT sessionUser.session_id, sessionUser.user_id, session.name, session.access_end_date FROM ". Database::get_main_table(TABLE_MAIN_SESSION_USER)." AS sessionUser INNER JOIN ".Database::get_main_table(TABLE_MAIN_SESSION)." AS session ON sessionUser.session_id = session.id @@ -58,7 +61,7 @@ foreach ($sessions as $sessionId => $userIds) { $usersToBeReminded[$row['user_id']][$row['session_id']] = array( 'name' => $row['name'], - 'date_end' => $row['date_end'] + 'access_end_date' => $row['access_end_date'] ); } } @@ -89,7 +92,7 @@ if ($usersToBeReminded) { PERSON_NAME_EMAIL_ADDRESS ); foreach ($sessions as $sessionId => $session) { - $daysRemaining = date_diff($today, date_create($session['date_end'])); + $daysRemaining = date_diff($today, date_create($session['access_end_date'])); $join = " INNER JOIN ".Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION)."ON id = access_url_id"; $result = Database::select( 'url', @@ -107,7 +110,7 @@ if ($usersToBeReminded) { get_lang('MailCronCourseExpirationReminderBody', null, $platformLanguage), $userCompleteName, $session['name'], - $session['date_end'], + $session['access_end_date'], $daysRemaining->format("%d"), $result[0]['url'], api_get_setting("siteName") @@ -122,7 +125,7 @@ if ($usersToBeReminded) { ); echo "Email sent to $userCompleteName (".$user['email'].")\n"; echo "Session: ".$session['name']."\n"; - echo "Date end: ".$session['date_end']."\n"; + echo "Date end: ".$session['access_end_date']."\n"; echo "Days remaining: ".$daysRemaining->format("%d")."\n\n"; } echo "======================================================================\n\n"; diff --git a/main/inc/lib/api.lib.php b/main/inc/lib/api.lib.php index 812a4d10b8..f832c1174e 100644 --- a/main/inc/lib/api.lib.php +++ b/main/inc/lib/api.lib.php @@ -2777,7 +2777,7 @@ function api_is_coach($session_id = 0, $courseId = null, $check_student_view = t $sessionIsCoach = null; if (!empty($course_code)) { - $sql = "SELECT DISTINCT s.id, name, date_start, date_end + $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 ON session_rc_ru.session_id = s.id AND session_rc_ru.user_id = '".$userId."' @@ -2790,18 +2790,18 @@ function api_is_coach($session_id = 0, $courseId = null, $check_student_view = t } if (!empty($session_id)) { - $sql = "SELECT DISTINCT id, name, date_start, date_end + $sql = "SELECT DISTINCT id, name, access_start_date, access_end_date FROM $session_table WHERE session.id_coach = '".$userId."' AND id = '$session_id' - ORDER BY date_start, date_end, name"; + ORDER BY access_start_date, access_end_date, name"; $result = Database::query($sql); if (!empty($sessionIsCoach)) { $sessionIsCoach = array_merge($sessionIsCoach , Database::store_result($result)); } else { $sessionIsCoach = Database::store_result($result); } - } + return (count($sessionIsCoach) > 0); } diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php index c9accc7df7..3507c44c8f 100755 --- a/main/inc/lib/sessionmanager.lib.php +++ b/main/inc/lib/sessionmanager.lib.php @@ -311,8 +311,10 @@ class SessionManager if (strpos($where_condition, 'c.id')) { $table = Database::get_main_table(TABLE_MAIN_SESSION_COURSE); $tableCourse = Database::get_main_table(TABLE_MAIN_COURSE); - $courseCondition = " INNER JOIN $table course_rel_session ON (s.id = course_rel_session.session_id) - INNER JOIN $tableCourse c ON (course_rel_session.c_id = c.id) + $courseCondition = " INNER JOIN $table course_rel_session + ON (s.id = course_rel_session.session_id) + INNER JOIN $tableCourse c + ON (course_rel_session.c_id = c.id) "; } @@ -320,16 +322,16 @@ class SessionManager SELECT DISTINCT IF ( (s.access_start_date <= '$today' AND '$today' <= s.access_end_date) OR - (s.nb_days_access_before_beginning > 0 AND DATEDIFF(s.date_start, '$today') <= s.nb_days_access_before_beginning) OR - (s.nb_days_access_after_end > 0 AND DATEDIFF('$today',s.date_end) <= s.nb_days_access_after_end) OR - (s.date_start = '0000-00-00' AND s.date_end = '0000-00-00' ) OR - (s.date_start <= '$today' AND '0000-00-00' = s.date_end) OR - ('$today' <= s.date_end AND '0000-00-00' = s.date_start) + (s.access_start_date IS NULL AND s.access_end_date = IS NULL ) OR + (s.access_start_date <= '$today' AND s.access_end_date IS NULL) OR + ('$today' <= s.access_end_date AND s.access_start_date IS NULL) , 1, 0) as session_active, s.id FROM $tbl_session s - LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id - INNER JOIN $tbl_user u ON s.id_coach = u.user_id + LEFT JOIN $tbl_session_category sc + ON s.session_category_id = sc.id + INNER JOIN $tbl_user u + ON s.id_coach = u.user_id $courseCondition $extraJoin $where $where_condition ) as session_table"; @@ -343,19 +345,19 @@ class SessionManager $sql = "SELECT count(id) as total_rows FROM ( SELECT DISTINCT IF ( - (s.date_start <= '$today' AND '$today' <= s.date_end) OR - (s.nb_days_access_before_beginning > 0 AND DATEDIFF(s.date_start, '$today') <= s.nb_days_access_before_beginning) OR - (s.nb_days_access_after_end > 0 AND DATEDIFF('$today',s.date_end) <= s.nb_days_access_after_end) OR - (s.date_start = '0000-00-00' AND s.date_end = '0000-00-00' ) OR - (s.date_start <= '$today' AND '0000-00-00' = s.date_end) OR - ('$today' <= s.date_end AND '0000-00-00' = s.date_start) + (s.access_start_date <= '$today' AND '$today' <= s.access_end_date) OR + (s.access_start_date IS NULL AND s.access_end_date IS NULL) OR + (s.access_start_date <= '$today' AND s.access_end_date IS NULL) OR + ('$today' <= s.access_end_date AND s.access_start_date IS NULL) , 1, 0) as session_active, s.id FROM $tbl_session s - LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id + LEFT JOIN $tbl_session_category sc + ON s.session_category_id = sc.id INNER JOIN $tbl_user u ON s.id_coach = u.user_id - INNER JOIN $table_access_url_rel_session ar ON ar.session_id = s.id + INNER JOIN $table_access_url_rel_session ar + ON ar.session_id = s.id $courseCondition $extraJoin $where $where_condition) as session_table"; @@ -384,12 +386,16 @@ class SessionManager $user_id = api_get_user_id(); if (!api_is_platform_admin()) { - if (api_is_session_admin() && api_get_setting('allow_session_admins_to_manage_all_sessions') == 'false') { + if (api_is_session_admin() && + api_get_setting('allow_session_admins_to_manage_all_sessions') == 'false' + ) { $where .=" AND s.session_admin_id = $user_id "; } } - if (!api_is_platform_admin() && api_is_teacher() && api_get_setting('allow_teachers_to_create_sessions') == 'true') { + if (!api_is_platform_admin() && api_is_teacher() && + api_get_setting('allow_teachers_to_create_sessions') == 'true' + ) { $where .=" AND s.id_coach = $user_id "; } @@ -425,7 +431,10 @@ class SessionManager $access_url_id = api_get_current_access_url_id(); if ($access_url_id != -1) { $where.= " AND ar.access_url_id = $access_url_id "; - $query = "$select FROM $tbl_session s $inject_joins INNER JOIN $table_access_url_rel_session ar ON (ar.session_id = s.id) $where"; + $query = "$select + FROM $tbl_session s $inject_joins + INNER JOIN $table_access_url_rel_session ar + ON (ar.session_id = s.id) $where"; } } @@ -2282,11 +2291,18 @@ class SessionManager return $msg; } if ($date_end <> null) { - $sql = "UPDATE $tbl_session_category SET name = '" . Database::escape_string($name) . "', date_start = '$date_start' " . - ", date_end = '$date_end' WHERE id= $id"; + $sql = "UPDATE $tbl_session_category + SET + name = '" . Database::escape_string($name) . "', + date_start = '$date_start' , + date_end = '$date_end' + WHERE id= $id"; } else { - $sql = "UPDATE $tbl_session_category SET name = '" . Database::escape_string($name) . "', date_start = '$date_start' " . - ", date_end = NULL WHERE id= $id"; + $sql = "UPDATE $tbl_session_category SET + name = '" . Database::escape_string($name) . "', + date_start = '$date_start', + date_end = NULL + WHERE id= $id"; } $result = Database::query($sql); return ($result ? true : false); @@ -3933,8 +3949,8 @@ class SessionManager // Updating the session. $params = array( 'id_coach' => $coach_id, - 'date_start' => $date_start, - 'date_end' => $date_end, + 'access_start_date' => $date_start, + 'access_end_date' => $date_end, 'visibility' => $visibilityAfterExpirationPerSession, 'session_category_id' => $session_category_id ); @@ -5339,32 +5355,6 @@ class SessionManager return false; } - /** - * Get the formatted date of a session by its start and end date - * @param array $sessionInfo The session information containing the start and end date - * @return string The formatted date - */ - public static function getSessionFormattedDate($sessionInfo) - { - if ($sessionInfo['date_start'] == '0000-00-00' && $sessionInfo['date_end'] == '0000-00-00') { - return get_lang('NoTimeLimits'); - } else { - if ($sessionInfo['date_start'] != '0000-00-00') { - $startDate = get_lang('From') . ' ' . api_format_date($sessionInfo['date_start'], DATE_FORMAT_LONG_NO_DAY); - } else { - $startDate = ''; - } - - if ($sessionInfo['date_end'] == '0000-00-00') { - $endDate = ''; - } else { - $endDate = get_lang('Until') . ' ' . api_format_date($sessionInfo['date_end'], DATE_FORMAT_LONG_NO_DAY); - } - - return "$startDate $endDate"; - } - } - /** * Get the session coached by a user (general coach and course-session coach) * @param int $coachId The coach id @@ -5599,7 +5589,7 @@ class SessionManager $extraFieldType = \Chamilo\CoreBundle\Entity\ExtraField::SESSION_FIELD_TYPE; // Get the session list from session category and target $sessionList = Database::select( - 'id, name, date_start, date_end', + 'id, name, access_start_date, access_end_date', $sTable, array( 'where' => array( @@ -6068,33 +6058,38 @@ class SessionManager * Converts "start date" and "end date" to "From start date to end date" string * @param string $startDate * @param string $endDate - * @return null|string + * + * @return string */ private static function convertSessionDateToString($startDate, $endDate) { - //This will clean the variables if 0000-00-00 00:00:00 the variable will be empty - $start_date = null; - $end_date = null; - if (isset($startDate)) { - $start_date = api_get_local_time($startDate, null, null, true); + $startDateToLocal = ''; + $endDateToLocal = ''; + // This will clean the variables if 0000-00-00 00:00:00 the variable will be empty + if (isset($startDateToLocal)) { + $startDateToLocal = api_get_local_time($startDate, null, null, true); } - if (isset($endDate)) { - $end_date = api_get_local_time($endDate, null, null, true); + if (isset($endDateToLocal)) { + $endDateToLocal = api_get_local_time($endDate, null, null, true); } - $msg_date = null; - if (!empty($start_date) && !empty($end_date)) { - $msg_date = sprintf(get_lang('FromDateXToDateY'), $start_date, $end_date); + $result = ''; + if (!empty($startDateToLocal) && !empty($endDateToLocal)) { + $result = sprintf(get_lang('FromDateXToDateY'), $startDateToLocal, $endDateToLocal); } else { - if (!empty($start_date)) { - $msg_date = get_lang('From').' '.$start_date; + if (!empty($startDateToLocal)) { + $result = get_lang('From').' '.$startDateToLocal; } - if (!empty($end_date)) { - $msg_date = get_lang('Until').' '.$end_date; + if (!empty($endDateToLocal)) { + $result = get_lang('Until').' '.$endDateToLocal; } } - return $msg_date; + if (empty($result)) { + $result = get_lang('NoTimeLimits'); + } + + return $result; } /** @@ -6260,25 +6255,6 @@ class SessionManager $form->addElement('checkbox', 'show_description', null, get_lang('ShowDescription')); - /* - $form->addElement('checkbox', 'start_limit', '', get_lang('DateStartSession'), array( - 'onchange' => 'disable_starttime(this)', - 'id' => 'start_limit' - )); - - $form->addElement('html',''); - - $form->addElement('checkbox', 'end_limit', '', get_lang('DateEndSession'), array( - 'onchange' => 'disable_endtime(this)', - 'id' => 'end_limit' - )); - - $form->addElement('html', '