|
|
|
@ -4188,16 +4188,22 @@ class CourseManager |
|
|
|
|
$user_id = api_get_user_id(); |
|
|
|
|
$course_info = api_get_course_info_by_id($course['real_id']); |
|
|
|
|
$course_visibility = (int) $course_info['visibility']; |
|
|
|
|
$allowUnsubscribe = api_get_configuration_value('enable_unsubscribe_button_on_my_course_page'); |
|
|
|
|
|
|
|
|
|
if (COURSE_VISIBILITY_HIDDEN === $course_visibility) { |
|
|
|
|
if ($course_visibility === COURSE_VISIBILITY_HIDDEN) { |
|
|
|
|
return ''; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$sessionInfo = []; |
|
|
|
|
if (!empty($session_id)) { |
|
|
|
|
$sessionInfo = api_get_session_info($session_id); |
|
|
|
|
} |
|
|
|
|
$userInCourseStatus = self::getUserInCourseStatus($user_id, $course_info['real_id']); |
|
|
|
|
$course_info['status'] = empty($session_id) ? $userInCourseStatus : STUDENT; |
|
|
|
|
$course_info['id_session'] = $session_id; |
|
|
|
|
|
|
|
|
|
$is_coach = api_is_coach($session_id, $course_info['real_id']); |
|
|
|
|
$isAdmin = api_is_platform_admin(); |
|
|
|
|
|
|
|
|
|
// Display course entry. |
|
|
|
|
// Show a hyperlink to the course, unless the course is closed and user is not course admin. |
|
|
|
@ -4223,15 +4229,15 @@ class CourseManager |
|
|
|
|
$notifications .= Display::show_notification($course_info); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$sessionCourseAvailable = false; |
|
|
|
|
if ($session_accessible) { |
|
|
|
|
if (COURSE_VISIBILITY_CLOSED != $course_visibility || |
|
|
|
|
COURSEMANAGER == $userInCourseStatus |
|
|
|
|
if ($course_visibility != COURSE_VISIBILITY_CLOSED || |
|
|
|
|
$userInCourseStatus == COURSEMANAGER |
|
|
|
|
) { |
|
|
|
|
if (empty($course_info['id_session'])) { |
|
|
|
|
$course_info['id_session'] = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$sessionCourseAvailable = false; |
|
|
|
|
$sessionCourseStatus = api_get_session_visibility($session_id, $course_info['real_id']); |
|
|
|
|
|
|
|
|
|
if (in_array( |
|
|
|
@ -4295,12 +4301,25 @@ class CourseManager |
|
|
|
|
$repo = $entityManager->getRepository(SequenceResource::class); |
|
|
|
|
|
|
|
|
|
$sequences = $repo->getRequirements($course_info['real_id'], SequenceResource::COURSE_TYPE); |
|
|
|
|
$sequenceList = $repo->checkRequirementsForUser($sequences, SequenceResource::COURSE_TYPE, $user_id); |
|
|
|
|
$sequenceList = $repo->checkRequirementsForUser( |
|
|
|
|
$sequences, |
|
|
|
|
SequenceResource::COURSE_TYPE, |
|
|
|
|
$user_id, |
|
|
|
|
$session_id |
|
|
|
|
); |
|
|
|
|
$completed = $repo->checkSequenceAreCompleted($sequenceList); |
|
|
|
|
//var_dump($course_info['real_id'], $completed); |
|
|
|
|
$params['completed'] = $completed; |
|
|
|
|
$params['requirements'] = ''; |
|
|
|
|
|
|
|
|
|
if ($isAdmin || |
|
|
|
|
$userInCourseStatus === COURSEMANAGER || |
|
|
|
|
$is_coach || |
|
|
|
|
$user_id == $sessionInfo['session_admin_id'] |
|
|
|
|
) { |
|
|
|
|
$params['completed'] = true; |
|
|
|
|
$params['requirements'] = ''; |
|
|
|
|
} else { |
|
|
|
|
if ($sequences && false === $completed) { |
|
|
|
|
$hasRequirements = false; |
|
|
|
|
foreach ($sequences as $sequence) { |
|
|
|
@ -4314,8 +4333,10 @@ class CourseManager |
|
|
|
|
$course_info['real_id'], |
|
|
|
|
SequenceResource::COURSE_TYPE, |
|
|
|
|
false, |
|
|
|
|
false |
|
|
|
|
false, |
|
|
|
|
$session_id |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -4324,38 +4345,47 @@ class CourseManager |
|
|
|
|
$params['edit_actions'] = ''; |
|
|
|
|
$params['document'] = ''; |
|
|
|
|
$params['category'] = $course_info['categoryName']; |
|
|
|
|
if ($course_visibility != COURSE_VISIBILITY_CLOSED && |
|
|
|
|
false === $is_coach && $allowUnsubscribe && '1' === $course_info['unsubscribe']) { |
|
|
|
|
$params['unregister_button'] = |
|
|
|
|
CoursesAndSessionsCatalog::return_unregister_button( |
|
|
|
|
['code' => $course_info['code']], |
|
|
|
|
Security::get_existing_token(), |
|
|
|
|
'', |
|
|
|
|
'', |
|
|
|
|
$session_id |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (COURSE_VISIBILITY_CLOSED != $course_visibility && |
|
|
|
|
COURSE_VISIBILITY_HIDDEN != $course_visibility |
|
|
|
|
) { |
|
|
|
|
if (api_is_platform_admin()) { |
|
|
|
|
$params['edit_actions'] .= api_get_path(WEB_CODE_PATH).'course_info/infocours.php?cid='.$course_info['real_id']; |
|
|
|
|
if ($isAdmin) { |
|
|
|
|
$params['edit_actions'] .= api_get_path(WEB_CODE_PATH).'course_info/infocours.php?cidReq='.$course_info['code']; |
|
|
|
|
if ($load_dirs) { |
|
|
|
|
$params['document'] .= '<a |
|
|
|
|
id="document_preview_'.$course_info['real_id'].'_'.$course_info['id_session'].'" |
|
|
|
|
id="document_preview_'.$course_info['real_id'].'_'.$session_id.'" |
|
|
|
|
class="document_preview btn btn-default btn-sm" |
|
|
|
|
href="javascript:void(0);">'. |
|
|
|
|
Display::returnFontAwesomeIcon('folder-open').'</a>'; |
|
|
|
|
$params['document'] .= Display::div('', [ |
|
|
|
|
'id' => 'document_result_'.$course_info['real_id'].'_'.$course_info['id_session'], |
|
|
|
|
'id' => 'document_result_'.$course_info['real_id'].'_'.$session_id, |
|
|
|
|
'class' => 'document_preview_container', |
|
|
|
|
]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if ('true' === api_get_setting('display_teacher_in_courselist')) { |
|
|
|
|
$teacher_list = self::getTeachersFromCourse( |
|
|
|
|
$teacher_list = self::getTeachersFromCourse($course_info['real_id'], true); |
|
|
|
|
$course_coachs = self::get_coachs_from_course( |
|
|
|
|
$session_id, |
|
|
|
|
$course_info['real_id'], |
|
|
|
|
true |
|
|
|
|
); |
|
|
|
|
$course_coachs = self::get_coachs_from_course( |
|
|
|
|
$course_info['id_session'], |
|
|
|
|
$course_info['real_id'] |
|
|
|
|
); |
|
|
|
|
$params['teachers'] = $teacher_list; |
|
|
|
|
|
|
|
|
|
if ((STUDENT == $course_info['status'] && !empty($course_info['id_session'])) || |
|
|
|
|
($is_coach && COURSEMANAGER != $course_info['status']) |
|
|
|
|
if (($course_info['status'] == STUDENT && !empty($session_id)) || |
|
|
|
|
($is_coach && $course_info['status'] != COURSEMANAGER) |
|
|
|
|
) { |
|
|
|
|
$params['coaches'] = $course_coachs; |
|
|
|
|
} |
|
|
|
@ -4363,44 +4393,42 @@ class CourseManager |
|
|
|
|
$special = isset($course['special_course']) ? true : false; |
|
|
|
|
$params['title'] = $session_title; |
|
|
|
|
$params['special'] = $special; |
|
|
|
|
if ('true' === api_get_setting('display_coursecode_in_courselist')) { |
|
|
|
|
if (api_get_setting('display_coursecode_in_courselist') === 'true') { |
|
|
|
|
$params['visual_code'] = '('.$course_info['visual_code'].')'; |
|
|
|
|
} |
|
|
|
|
$params['extra'] = ''; |
|
|
|
|
$html = $params; |
|
|
|
|
|
|
|
|
|
$session_category_id = null; |
|
|
|
|
if (1) { |
|
|
|
|
$session = ''; |
|
|
|
|
$active = false; |
|
|
|
|
if (!empty($course_info['id_session'])) { |
|
|
|
|
$session = api_get_session_info($course_info['id_session']); |
|
|
|
|
if (!empty($session_id)) { |
|
|
|
|
$sessionCoachName = ''; |
|
|
|
|
if (!empty($session['id_coach'])) { |
|
|
|
|
$coachInfo = api_get_user_info($session['id_coach']); |
|
|
|
|
if (!empty($sessionInfo['id_coach'])) { |
|
|
|
|
$coachInfo = api_get_user_info($sessionInfo['id_coach']); |
|
|
|
|
$sessionCoachName = $coachInfo['complete_name']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$session_category_id = self::get_session_category_id_by_session_id($course_info['id_session']); |
|
|
|
|
|
|
|
|
|
if ( |
|
|
|
|
'0000-00-00 00:00:00' === $session['access_start_date'] || empty($session['access_start_date']) || |
|
|
|
|
'0000-00-00' === $session['access_start_date'] |
|
|
|
|
$sessionInfo['access_start_date'] === '0000-00-00 00:00:00' || |
|
|
|
|
empty($sessionInfo['access_start_date']) || |
|
|
|
|
$sessionInfo['access_start_date'] === '0000-00-00' |
|
|
|
|
) { |
|
|
|
|
$session['dates'] = ''; |
|
|
|
|
if ('true' === api_get_setting('show_session_coach')) { |
|
|
|
|
$session['coach'] = get_lang('General coach').': '.$sessionCoachName; |
|
|
|
|
$sessionInfo['dates'] = ''; |
|
|
|
|
if (api_get_setting('show_session_coach') === 'true') { |
|
|
|
|
$sessionInfo['coach'] = get_lang('GeneralCoach').': '.$sessionCoachName; |
|
|
|
|
} |
|
|
|
|
$active = true; |
|
|
|
|
} else { |
|
|
|
|
$session['dates'] = ' - '. |
|
|
|
|
get_lang('From').' '.$session['access_start_date'].' '. |
|
|
|
|
get_lang('To').' '.$session['access_end_date']; |
|
|
|
|
if ('true' === api_get_setting('show_session_coach')) { |
|
|
|
|
$session['coach'] = get_lang('General coach').': '.$sessionCoachName; |
|
|
|
|
$sessionInfo['dates'] = ' - '. |
|
|
|
|
get_lang('From').' '.$sessionInfo['access_start_date'].' '. |
|
|
|
|
get_lang('To').' '.$sessionInfo['access_end_date']; |
|
|
|
|
if (api_get_setting('show_session_coach') === 'true') { |
|
|
|
|
$sessionInfo['coach'] = get_lang('GeneralCoach').': '.$sessionCoachName; |
|
|
|
|
} |
|
|
|
|
$date_start = $session['access_start_date']; |
|
|
|
|
$date_end = $session['access_end_date']; |
|
|
|
|
$date_start = $sessionInfo['access_start_date']; |
|
|
|
|
$date_end = $sessionInfo['access_end_date']; |
|
|
|
|
$active = !$date_end ? ($date_start <= $now) : ($date_start <= $now && $date_end >= $now); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -4412,7 +4440,7 @@ class CourseManager |
|
|
|
|
$user_course_category, |
|
|
|
|
$html, |
|
|
|
|
$course_info['id_session'], |
|
|
|
|
$session, |
|
|
|
|
$sessionInfo, |
|
|
|
|
'active' => $active, |
|
|
|
|
'session_category_id' => $session_category_id, |
|
|
|
|
]; |
|
|
|
@ -4430,9 +4458,6 @@ class CourseManager |
|
|
|
|
$output['skill']['icon'] = $skill->getIcon(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
$output = [$course_info['user_course_cat'], $html]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $output; |
|
|
|
|
} |
|
|
|
@ -4457,14 +4482,14 @@ class CourseManager |
|
|
|
|
|
|
|
|
|
if (!empty($course_info)) { |
|
|
|
|
$cb = new CourseBuilder('', $course_info); |
|
|
|
|
$course = $cb->build($source_session_id, $source_course_code, true); |
|
|
|
|
$course_restorer = new CourseRestorer($course); |
|
|
|
|
$course_restorer->skip_content = $params; |
|
|
|
|
$course_restorer->restore( |
|
|
|
|
$course = $cb->build($source_session_id, $source_course_code, $withBaseContent); |
|
|
|
|
$restorer = new CourseRestorer($course); |
|
|
|
|
$restorer->skip_content = $params; |
|
|
|
|
$restorer->restore( |
|
|
|
|
$destination_course_code, |
|
|
|
|
$destination_session_id, |
|
|
|
|
true, |
|
|
|
|
true |
|
|
|
|
$withBaseContent |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
@ -4481,6 +4506,7 @@ class CourseManager |
|
|
|
|
* @param int source session id |
|
|
|
|
* @param int destination session id |
|
|
|
|
* @param array $params |
|
|
|
|
* @param bool $copySessionContent |
|
|
|
|
* |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
@ -4489,7 +4515,8 @@ class CourseManager |
|
|
|
|
$source_course_code, |
|
|
|
|
$source_session_id = 0, |
|
|
|
|
$destination_session_id = 0, |
|
|
|
|
$params = [] |
|
|
|
|
$params = [], |
|
|
|
|
$copySessionContent = false |
|
|
|
|
) { |
|
|
|
|
$source_course_info = api_get_course_info($source_course_code); |
|
|
|
|
if (!empty($source_course_info)) { |
|
|
|
@ -4506,7 +4533,8 @@ class CourseManager |
|
|
|
|
$source_session_id, |
|
|
|
|
$new_course_info['code'], |
|
|
|
|
$destination_session_id, |
|
|
|
|
$params |
|
|
|
|
$params, |
|
|
|
|
true |
|
|
|
|
); |
|
|
|
|
if ($result) { |
|
|
|
|
return $new_course_info; |
|
|
|
@ -5285,18 +5313,19 @@ class CourseManager |
|
|
|
|
* |
|
|
|
|
* @param string $courseTableAlias Alias of the course table |
|
|
|
|
* @param bool $hideClosed Whether to hide closed and hidden courses |
|
|
|
|
* @param bool $checkHidePrivate |
|
|
|
|
* |
|
|
|
|
* @return string SQL conditions |
|
|
|
|
*/ |
|
|
|
|
public static function getCourseVisibilitySQLCondition( |
|
|
|
|
$courseTableAlias, |
|
|
|
|
$hideClosed = false |
|
|
|
|
) { |
|
|
|
|
public static function getCourseVisibilitySQLCondition($courseTableAlias, $hideClosed = false, $checkHidePrivate = true) |
|
|
|
|
{ |
|
|
|
|
$visibilityCondition = ''; |
|
|
|
|
$hidePrivate = api_get_setting('course_catalog_hide_private'); |
|
|
|
|
if ('true' === $hidePrivate) { |
|
|
|
|
if ($checkHidePrivate) { |
|
|
|
|
$hidePrivateSetting = api_get_setting('course_catalog_hide_private'); |
|
|
|
|
if ('true' === $hidePrivateSetting) { |
|
|
|
|
$visibilityCondition .= " AND $courseTableAlias.visibility <> ".COURSE_VISIBILITY_REGISTERED; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if ($hideClosed) { |
|
|
|
|
$visibilityCondition .= " AND $courseTableAlias.visibility NOT IN (".COURSE_VISIBILITY_CLOSED.','.COURSE_VISIBILITY_HIDDEN.')'; |
|
|
|
|
} |
|
|
|
|