From 7ce002997a7a9153aba487963cec04ceb7f0d8e1 Mon Sep 17 00:00:00 2001 From: ywarnier Date: Sun, 16 Jan 2011 13:13:04 -0500 Subject: [PATCH 1/9] Fixed strange unreported bug in get_course_code_from_original_id() --- main/inc/lib/course.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index c528c39fe2..adfc79dd89 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -450,7 +450,7 @@ class CourseManager { $table_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD); $sql_course = "SELECT course_code FROM $table_field cf INNER JOIN $t_cfv cfv ON cfv.field_id=cf.id WHERE field_variable='$original_course_id_name' AND field_value='$original_course_id_value'"; $res = Database::query($sql_course); - $row = Database::fetch_object($res_course); + $row = Database::fetch_object($res); if ($row) { return $row->course_code; } else { From 8575316b5000285e28c1608761b7baa164a6e9f5 Mon Sep 17 00:00:00 2001 From: ywarnier Date: Sun, 16 Jan 2011 13:17:27 -0500 Subject: [PATCH 2/9] Removed unused function get_personal_course_list() --- user_portal.php | 67 +------------------------------------------------ 1 file changed, 1 insertion(+), 66 deletions(-) diff --git a/user_portal.php b/user_portal.php index df0946a096..c15d62c277 100755 --- a/user_portal.php +++ b/user_portal.php @@ -12,7 +12,7 @@ * @package chamilo.main * @todo Shouldn't the SCRIPTVAL_ and CONFVAL_ constant be moved to the config page? Has anybody any idea what the are used for? * If these are really configuration settings then we can add those to the dokeos config settings. - * @todo move get_personal_course_list and some other functions to a more appripriate place course.lib.php or user.lib.php + * @todo move display_special_courses and some other functions to a more appripriate place course.lib.php or user.lib.php * @todo use api_get_path instead of $rootAdminWeb * @todo check for duplication of functions with index.php (user_portal.php is orginally a copy of index.php) * @todo display_digest, shouldn't this be removed and be made into an extension? @@ -159,7 +159,6 @@ Display :: display_header($nameTools); display_digest($toolsList, $digest, $orderKey, $courses) show_notification($my_course) - get_personal_course_list($user_id) get_logged_user_course_html($my_course) get_user_course_categories() */ @@ -169,70 +168,6 @@ Display :: display_header($nameTools); Some of these can go to database layer. */ -/** -* Database function that gets the list of courses for a particular user. -* @param int The id of the user -* @return array An array with courses -*/ -function get_personal_course_list($user_id) { - // Initialisation - $personal_course_list = array(); - - // Table definitions - $main_user_table = Database :: get_main_table(TABLE_MAIN_USER); - $main_course_table = Database :: get_main_table(TABLE_MAIN_COURSE); - $main_course_user_table = Database :: get_main_table(TABLE_MAIN_COURSE_USER); - $tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE); - $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER); - $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); - - $user_id = Database::escape_string($user_id); - $personal_course_list = array(); - - // Courses in which we suscribed out of any session - $personal_course_list_sql = "SELECT course.code k, course.directory d, course.visual_code c, course.db_name db, course.title i, - course.tutor_name t, course.course_language l, course_rel_user.status s, course_rel_user.sort sort, - course_rel_user.user_course_cat user_course_cat - FROM ".$main_course_table." course,".$main_course_user_table." course_rel_user - WHERE course.code = course_rel_user.course_code"." - AND course_rel_user.user_id = '".$user_id."' - AND course_rel_user.relation_type<>".COURSE_RELATION_TYPE_RRHH." - ORDER BY course_rel_user.user_course_cat, course_rel_user.sort ASC,i"; - - $course_list_sql_result = Database::query($personal_course_list_sql); - - while ($result_row = Database::fetch_array($course_list_sql_result)) { - $personal_course_list[] = $result_row; - } - - //$personal_course_list = array_merge($personal_course_list, $course_list_sql_result); - - $personal_course_list_sql = "SELECT DISTINCT course.code k, course.directory d, course.visual_code c, course.db_name db, course.title i, course.tutor_name t, course.course_language l, 5 as s - FROM $main_course_table as course, $tbl_session_course_user as srcru - WHERE srcru.course_code=course.code AND srcru.id_user='$user_id'"; - - $course_list_sql_result = Database::query($personal_course_list_sql); - - while ($result_row = Database::fetch_array($course_list_sql_result)) { - $personal_course_list[] = $result_row; - } - - //$personal_course_list = array_merge($personal_course_list, $course_list_sql_result); - - $personal_course_list_sql = "SELECT DISTINCT course.code k, course.directory d, course.visual_code c, course.db_name db, course.title i, course.tutor_name t, course.course_language l, 2 as s - FROM $main_course_table as course, $tbl_session_course as src, $tbl_session as session - WHERE session.id_coach='$user_id' AND session.id=src.id_session AND src.course_code=course.code"; - - $course_list_sql_result = Database::query($personal_course_list_sql); - - //$personal_course_list = array_merge($personal_course_list, $course_list_sql_result); - - while ($result_row = Database::fetch_array($course_list_sql_result)) { - $personal_course_list[] = $result_row; - } - return $personal_course_list; -} - /** * Display special courses (and only these) as several HTML divs of class userportal-course-item * From 447660b11bbf0f4cbd24d49aca228af570e39d9b Mon Sep 17 00:00:00 2001 From: ywarnier Date: Sun, 16 Jan 2011 13:22:15 -0500 Subject: [PATCH 3/9] Moved display_special_courses() to course.lib.php --- main/inc/lib/course.lib.php | 110 +++++++++++++++++++++++++++++++++ user_portal.php | 117 +----------------------------------- 2 files changed, 113 insertions(+), 114 deletions(-) diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index adfc79dd89..7084251243 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -2491,4 +2491,114 @@ class CourseManager { return self::course_code_exists($wanted_course_code); } + /** + * Display special courses (and only these) as several HTML divs of class userportal-course-item + * + * Special courses are courses that stick on top of the list and are "auto-registerable" + * in the sense that any user clicking them is registered as a student + * @param int User id + * @return void + */ + function display_special_courses ($user_id) { + + $user_id = intval($user_id); + $user_info = api_get_user_info($user_id); + $special_course_list = array(); + + $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE); + $tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); + $tbl_course_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD); + $tbl_course_field_value = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES); + $tbl_user_course_category = Database::get_user_personal_table(TABLE_USER_COURSE_CATEGORY); + + // get course list auto-register + $sql = "SELECT course_code FROM $tbl_course_field_value tcfv INNER JOIN $tbl_course_field tcf ON " . + " tcfv.field_id = tcf.id WHERE tcf.field_variable = 'special_course' AND tcfv.field_value = 1 "; + + $special_course_result = Database::query($sql); + if (Database::num_rows($special_course_result) > 0) { + $special_course_list = array(); + while ($result_row = Database::fetch_array($special_course_result)) { + $special_course_list[] = '"'.$result_row['course_code'].'"'; + } + } + $with_special_courses = $without_special_courses = ''; + if (!empty($special_course_list)) { + $with_special_courses = ' course.code IN ('.implode(',',$special_course_list).')'; + } + + if (!empty($with_special_courses)) { + $sql = "SELECT course.code, course.visual_code, course.subscribe subscr, course.unsubscribe unsubscr, + course.title title, course.tutor_name tutor, course.db_name, course.directory, course_rel_user.status status, + course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat, course_rel_user.user_id, course.visibility + FROM $TABLECOURS course + LEFT JOIN $TABLECOURSUSER course_rel_user ON course.code = course_rel_user.course_code AND course_rel_user.user_id = '$user_id' + WHERE $with_special_courses group by course.code"; + + $rs_special_course = Database::query($sql); + $number_of_courses = Database::num_rows($rs_special_course); + $key = 0; + $status_icon = ''; + if ($number_of_courses > 0) { + while ($course = Database::fetch_array($rs_special_course)) { + + // Get notifications. + $my_course = array(); + $my_course['db'] = $course['db_name']; + $my_course['k'] = $course['code']; + $my_course['id_session'] = null; + $my_course['s'] = $course['status']; + $show_notification = show_notification($my_course); + + if (empty($course['user_id'])) { + $course['status'] = $user_info['status']; + } + + $status_icon = Display::return_icon('blackboard.png', get_lang('Course'), array('width'=>'48px')); + /* + if ($course['status'] == 1) { + $status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('teachers.gif', get_lang('Status').': '.get_lang('Teacher'), array('style' => 'width: 11px; height: 11px;')); + } + if (($course['status'] == 5 && !api_is_coach()) || empty($course['status'])) { + $status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('students.gif', get_lang('Status').': '.get_lang('Student'), array('style' => 'width: 11px; height: 11px;')); + }*/ + + echo '
'; + + if (api_is_platform_admin()) { + echo '
'.Display::return_icon('edit.gif', get_lang('Edit'), array('align' => 'absmiddle')).''; + if ($course['status'] == COURSEMANAGER) { + //echo Display::return_icon('teachers.gif', get_lang('Status').': '.get_lang('Teacher'),array('style'=>'width:11px; height:11px;')); + } + echo '
'; + } + $course_visibility = $course['visibility']; + if ($course_visibility != COURSE_VISIBILITY_CLOSED || $course['status'] == COURSEMANAGER) { + $course_title = ''.$course['title'].''; + } else { + $course_title = $course['title']." ".get_lang('CourseClosed'); + } + + echo '
'.$status_icon.'
'.$course_title.'
'; + if (api_get_setting('display_coursecode_in_courselist') == 'true') { + echo $course['visual_code']; + } + if (api_get_setting('display_coursecode_in_courselist') == 'true' && api_get_setting('display_teacher_in_courselist') == 'true') { + echo ' - '; + } + + if (api_get_setting('display_teacher_in_courselist') == 'true') { + echo $course['tutor']; + } + echo ' '; + echo Display::return_icon('klipper.png', get_lang('CourseAutoRegister')); + + // Show notifications. + echo $show_notification; + echo '
'; + $key++; + } + } + } + } } //end class CourseManager diff --git a/user_portal.php b/user_portal.php index c15d62c277..d89eabd1e1 100755 --- a/user_portal.php +++ b/user_portal.php @@ -12,7 +12,7 @@ * @package chamilo.main * @todo Shouldn't the SCRIPTVAL_ and CONFVAL_ constant be moved to the config page? Has anybody any idea what the are used for? * If these are really configuration settings then we can add those to the dokeos config settings. - * @todo move display_special_courses and some other functions to a more appripriate place course.lib.php or user.lib.php + * @todo move display_courses and some other functions to a more appripriate place course.lib.php or user.lib.php * @todo use api_get_path instead of $rootAdminWeb * @todo check for duplication of functions with index.php (user_portal.php is orginally a copy of index.php) * @todo display_digest, shouldn't this be removed and be made into an extension? @@ -168,117 +168,6 @@ Display :: display_header($nameTools); Some of these can go to database layer. */ -/** - * Display special courses (and only these) as several HTML divs of class userportal-course-item - * - * Special courses are courses that stick on top of the list and are "auto-registerable" - * in the sense that any user clicking them is registered as a student - * @param int User id - * @return void - */ -function display_special_courses ($user_id) { - - $user_id = intval($user_id); - $user_info = api_get_user_info($user_id); - $special_course_list = array(); - - $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE); - $tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); - $tbl_course_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD); - $tbl_course_field_value = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES); - $tbl_user_course_category = Database::get_user_personal_table(TABLE_USER_COURSE_CATEGORY); - - // get course list auto-register - $sql = "SELECT course_code FROM $tbl_course_field_value tcfv INNER JOIN $tbl_course_field tcf ON " . - " tcfv.field_id = tcf.id WHERE tcf.field_variable = 'special_course' AND tcfv.field_value = 1 "; - - $special_course_result = Database::query($sql); - if (Database::num_rows($special_course_result) > 0) { - $special_course_list = array(); - while ($result_row = Database::fetch_array($special_course_result)) { - $special_course_list[] = '"'.$result_row['course_code'].'"'; - } - } - $with_special_courses = $without_special_courses = ''; - if (!empty($special_course_list)) { - $with_special_courses = ' course.code IN ('.implode(',',$special_course_list).')'; - } - - if (!empty($with_special_courses)) { - $sql = "SELECT course.code, course.visual_code, course.subscribe subscr, course.unsubscribe unsubscr, - course.title title, course.tutor_name tutor, course.db_name, course.directory, course_rel_user.status status, - course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat, course_rel_user.user_id, course.visibility - FROM $TABLECOURS course - LEFT JOIN $TABLECOURSUSER course_rel_user ON course.code = course_rel_user.course_code AND course_rel_user.user_id = '$user_id' - WHERE $with_special_courses group by course.code"; - - $rs_special_course = Database::query($sql); - $number_of_courses = Database::num_rows($rs_special_course); - $key = 0; - $status_icon = ''; - if ($number_of_courses > 0) { - while ($course = Database::fetch_array($rs_special_course)) { - - // Get notifications. - $my_course = array(); - $my_course['db'] = $course['db_name']; - $my_course['k'] = $course['code']; - $my_course['id_session'] = null; - $my_course['s'] = $course['status']; - $show_notification = show_notification($my_course); - - if (empty($course['user_id'])) { - $course['status'] = $user_info['status']; - } - - $status_icon = Display::return_icon('blackboard.png', get_lang('Course'), array('width'=>'48px')); - /* - if ($course['status'] == 1) { - $status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('teachers.gif', get_lang('Status').': '.get_lang('Teacher'), array('style' => 'width: 11px; height: 11px;')); - } - if (($course['status'] == 5 && !api_is_coach()) || empty($course['status'])) { - $status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('students.gif', get_lang('Status').': '.get_lang('Student'), array('style' => 'width: 11px; height: 11px;')); - }*/ - - echo '
'; - - if (api_is_platform_admin()) { - echo '
'.Display::return_icon('edit.gif', get_lang('Edit'), array('align' => 'absmiddle')).''; - if ($course['status'] == COURSEMANAGER) { - //echo Display::return_icon('teachers.gif', get_lang('Status').': '.get_lang('Teacher'),array('style'=>'width:11px; height:11px;')); - } - echo '
'; - } - $course_visibility = $course['visibility']; - if ($course_visibility != COURSE_VISIBILITY_CLOSED || $course['status'] == COURSEMANAGER) { - $course_title = ''.$course['title'].''; - } else { - $course_title = $course['title']." ".get_lang('CourseClosed'); - } - - echo '
'.$status_icon.'
'.$course_title.'
'; - if (api_get_setting('display_coursecode_in_courselist') == 'true') { - echo $course['visual_code']; - } - if (api_get_setting('display_coursecode_in_courselist') == 'true' && api_get_setting('display_teacher_in_courselist') == 'true') { - echo ' - '; - } - - if (api_get_setting('display_teacher_in_courselist') == 'true') { - echo $course['tutor']; - } - echo ' '; - echo Display::return_icon('klipper.png', get_lang('CourseAutoRegister')); - - // Show notifications. - echo $show_notification; - echo '
'; - $key++; - } - } - } -} - /** * Display courses (without special courses) as several HTML divs * of course categories, as class userportal-catalog-item. @@ -1143,7 +1032,7 @@ if (!empty ($_GET['include']) && preg_match('/^[a-zA-Z0-9_-]*\.html$/',$_GET['in $thisCoursePath = $my_course['d']; $sys_course_path = api_get_path(SYS_COURSE_PATH); $dbname = $my_course['k']; - $status = array(); + $status = array(); $status[$dbname] = $my_course['s']; $nbDigestEntries = 0; // Number of entries already collected. @@ -1242,7 +1131,7 @@ if (is_array($courses_tree)) { if ($key == 0) { // Sessions and courses that are not in a session category. if (!isset($_GET['history'])) { // Check if it's not history trainnign session list. - display_special_courses(api_get_user_id()); + CourseManager :: display_special_courses(api_get_user_id()); display_courses(api_get_user_id()); } // Independent sessions. From 35e349366d1426480d5557024ea08a24232423d2 Mon Sep 17 00:00:00 2001 From: ywarnier Date: Sun, 16 Jan 2011 15:52:37 -0500 Subject: [PATCH 4/9] Removed get_thematic_progress_icon() function --- main/inc/lib/course.lib.php | 167 ++++++++++++++++++++++++++ user_portal.php | 230 +----------------------------------- 2 files changed, 169 insertions(+), 228 deletions(-) diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index 7084251243..2a29ae641b 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -2601,4 +2601,171 @@ class CourseManager { } } } + /** + * Display courses (without special courses) as several HTML divs + * of course categories, as class userportal-catalog-item. + * @uses display_courses_in_category() to display the courses themselves + * @param int user id + * @return void + */ + function display_courses($user_id) { + + global $_user, $_configuration; + + // Building an array that contains all the id's of the user defined course categories. + // Initially this was inside the display_courses_in_category function but when we do it here we have fewer + // sql executions = performance increase. + $all_user_categories = get_user_course_categories(); + + // Step 0: We display the course without a user category. + display_courses_in_category(0, 'true'); + + // Step 1: We get all the categories of the user. + $tucc = Database::get_user_personal_table(TABLE_USER_COURSE_CATEGORY); + $sql = "SELECT id, title FROM $tucc WHERE user_id='".$_user['user_id']."' ORDER BY sort ASC"; + $result = Database::query($sql); + while ($row = Database::fetch_array($result)) { + // We simply display the title of the category. + echo '
'; + echo '
    '; + echo '
  • '; + echo Display::return_icon('folder_yellow.png', '', array('width' => '48px', 'align' => 'absmiddle')); + echo ''; + echo ''; // Display an internal anchor. + echo $row['title']; + echo ''; + echo '
  • '; + display_courses_in_category($row['id']); + echo '
'; + echo '
'; + } + } + /** + * Display courses inside a category (without special courses) as HTML dics of + * class userportal-course-item. + * @param int User category id + * @return void + */ + function display_courses_in_category($user_category_id) { + + global $_user, $_configuration; + // Table definitions + $TABLECOURS = Database :: get_main_table(TABLE_MAIN_COURSE); + $TABLECOURSUSER = Database :: get_main_table(TABLE_MAIN_COURSE_USER); + $TABLE_COURSE_FIELD = Database :: get_main_table(TABLE_MAIN_COURSE_FIELD); + $TABLE_COURSE_FIELD_VALUE = Database :: get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES); + $TABLE_ACCESS_URL_REL_COURSE = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); + $TABLE_USER_COURSE_CATEGORY = Database :: get_user_personal_table(TABLE_USER_COURSE_CATEGORY); + $current_url_id = api_get_current_access_url_id(); + + // Get course list auto-register + $sql = "SELECT course_code FROM $TABLE_COURSE_FIELD_VALUE tcfv INNER JOIN $TABLE_COURSE_FIELD tcf ON " . + " tcfv.field_id = tcf.id WHERE tcf.field_variable = 'special_course' AND tcfv.field_value = 1 "; + + $special_course_result = Database::query($sql); + if (Database::num_rows($special_course_result) > 0) { + $special_course_list = array(); + while ($result_row = Database::fetch_array($special_course_result)) { + $special_course_list[] = '"'.$result_row['course_code'].'"'; + } + } + $without_special_courses = ''; + if (!empty($special_course_list)) { + $without_special_courses = ' AND course.code NOT IN ('.implode(',',$special_course_list).')'; + } + + $sql_select_courses = "SELECT course.code, course.visual_code, course.subscribe subscr, course.unsubscribe unsubscr, + course.title title, course.tutor_name tutor, course.db_name, course.directory, course_rel_user.status status, + course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat, course.visibility + FROM $TABLECOURS course, + $TABLECOURSUSER course_rel_user, ".$TABLE_ACCESS_URL_REL_COURSE." url + WHERE course.code = course_rel_user.course_code AND url.course_code = course.code + AND course_rel_user.user_id = '".$_user['user_id']."' + AND course_rel_user.relation_type<>".COURSE_RELATION_TYPE_RRHH." + AND course_rel_user.user_course_cat='".$user_category_id."' $without_special_courses "; + // If multiple URL access mode is enabled, only fetch courses + // corresponding to the current URL. + if ($_configuration['multiple_access_urls'] && $current_url_id != -1){ + $sql_select_courses .= " AND url.course_code=course.code AND access_url_id='".$current_url_id."'"; + } + // Use user's classification for courses (if any). + $sql_select_courses .= " ORDER BY course_rel_user.user_course_cat, course_rel_user.sort ASC"; + $result = Database::query($sql_select_courses); + $number_of_courses = Database::num_rows($result); + $key = 0; + $status_icon = ''; + + // Browse through all courses. + while ($course = Database::fetch_array($result)) { + // Get notifications. + $my_course = array(); + $my_course['db'] = $course['db_name']; + $my_course['k'] = $course['code']; + $my_course['id_session'] = null; + $my_course['s'] = $course['status']; + // For each course, get if there is any notification icon to show + // (something that would have changed since the user's last visit). + $show_notification = show_notification($my_course); + // New code displaying the user's status in respect to this course. + $status_icon = Display::return_icon('blackboard.png', get_lang('Course'), array('width' => '48px')); + + echo '
'; + + if (api_is_platform_admin()) { + echo '
'.Display::return_icon('edit.gif', get_lang('Edit'), array('align' => 'absmiddle')).''; + if ($course['status'] == COURSEMANAGER) { + //echo Display::return_icon('teachers.gif', get_lang('Status').': '.get_lang('Teacher'), array('style'=>'width: 11px; height: 11px;')); + } + echo '
'; + } + + // Function logic - act on the data (check if the course is virtual, if yes change the link). + $is_virtual_course = CourseManager :: is_virtual_course_from_system_code($course['code']); + if ($is_virtual_course) { + // If the current user is also subscribed in the real course to which this + // virtual course is linked, we don't need to display the virtual course entry in + // the course list - it is combined with the real course entry. + $target_course_code = CourseManager :: get_target_of_linked_course($course['code']); + $is_subscribed_in_target_course = CourseManager :: is_user_subscribed_in_course(api_get_user_id(), $target_course_code); + if ($is_subscribed_in_target_course) { + return; // Do not display this course entry. + } + } + // Check if the course has virtual courses attached. If yes change the course title and display code. + $has_virtual_courses = CourseManager :: has_virtual_courses_from_code($course['code'], api_get_user_id()); + if ($has_virtual_courses) { + $course_info = api_get_course_info($course['code']); + $return_result = CourseManager :: determine_course_title_from_course_info(api_get_user_id(), $course_info); + $course_title = $return_result['title']; + $course_display_code = $return_result['code']; + } else { + $course_title = $course['title']; + $course_display_code = $course['visual_code']; + } + + // Show a hyperlink to the course, unless the course is closed and user is not course admin. + $course_visibility = $course['visibility']; + if ($course_visibility != COURSE_VISIBILITY_CLOSED || $course['status'] == COURSEMANAGER) { + $course_title = ''.$course['title'].''; + } else { + $course_title = $course['title']." ".get_lang('CourseClosed'); + } + // Start displaying the course block itself. + echo '
'.$status_icon.'
'.$course_title.'
'; + if (api_get_setting('display_coursecode_in_courselist') == 'true') { + echo $course_display_code; + } + if (api_get_setting('display_coursecode_in_courselist') == 'true' && api_get_setting('display_teacher_in_courselist') == 'true') { + echo ' - '; + } + if (api_get_setting('display_teacher_in_courselist') == 'true') { + if (!empty($course['tutor'])) + echo $course['tutor']; + } + // Show notifications. + echo $show_notification; + echo '
'; + $key++; + } + } } //end class CourseManager diff --git a/user_portal.php b/user_portal.php index d89eabd1e1..63bc6a46dc 100755 --- a/user_portal.php +++ b/user_portal.php @@ -163,223 +163,6 @@ Display :: display_header($nameTools); get_user_course_categories() */ -/* - Database functions - Some of these can go to database layer. -*/ - -/** - * Display courses (without special courses) as several HTML divs - * of course categories, as class userportal-catalog-item. - * @uses display_courses_in_category() to display the courses themselves - * @param int user id - * @return void - */ -function display_courses($user_id) { - - global $_user, $_configuration; - - // Building an array that contains all the id's of the user defined course categories. - // Initially this was inside the display_courses_in_category function but when we do it here we have fewer - // sql executions = performance increase. - $all_user_categories = get_user_course_categories(); - - // Step 0: We display the course without a user category. - display_courses_in_category(0, 'true'); - - // Step 1: We get all the categories of the user. - $tucc = Database::get_user_personal_table(TABLE_USER_COURSE_CATEGORY); - $sql = "SELECT id, title FROM $tucc WHERE user_id='".$_user['user_id']."' ORDER BY sort ASC"; - $result = Database::query($sql); - while ($row = Database::fetch_array($result)) { - // We simply display the title of the category. - echo '
'; - echo '
    '; - echo '
  • '; - echo Display::return_icon('folder_yellow.png', '', array('width' => '48px', 'align' => 'absmiddle')); - echo ''; - echo ''; // Display an internal anchor. - echo $row['title']; - echo ''; - echo '
  • '; - display_courses_in_category($row['id']); - echo '
'; - echo '
'; - } -} - -/** - * Display courses inside a category (without special courses) as HTML dics of - * class userportal-course-item. - * @param int User category id - * @return void - */ -function display_courses_in_category($user_category_id) { - - global $_user, $_configuration; - // Table definitions - $TABLECOURS = Database :: get_main_table(TABLE_MAIN_COURSE); - $TABLECOURSUSER = Database :: get_main_table(TABLE_MAIN_COURSE_USER); - $TABLE_COURSE_FIELD = Database :: get_main_table(TABLE_MAIN_COURSE_FIELD); - $TABLE_COURSE_FIELD_VALUE = Database :: get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES); - $TABLE_ACCESS_URL_REL_COURSE = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); - $TABLE_USER_COURSE_CATEGORY = Database :: get_user_personal_table(TABLE_USER_COURSE_CATEGORY); - $current_url_id = api_get_current_access_url_id(); - - // Get course list auto-register - $sql = "SELECT course_code FROM $TABLE_COURSE_FIELD_VALUE tcfv INNER JOIN $TABLE_COURSE_FIELD tcf ON " . - " tcfv.field_id = tcf.id WHERE tcf.field_variable = 'special_course' AND tcfv.field_value = 1 "; - - $special_course_result = Database::query($sql); - if (Database::num_rows($special_course_result) > 0) { - $special_course_list = array(); - while ($result_row = Database::fetch_array($special_course_result)) { - $special_course_list[] = '"'.$result_row['course_code'].'"'; - } - } - $without_special_courses = ''; - if (!empty($special_course_list)) { - $without_special_courses = ' AND course.code NOT IN ('.implode(',',$special_course_list).')'; - } - - $sql_select_courses = "SELECT course.code, course.visual_code, course.subscribe subscr, course.unsubscribe unsubscr, - course.title title, course.tutor_name tutor, course.db_name, course.directory, course_rel_user.status status, - course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat, course.visibility - FROM $TABLECOURS course, - $TABLECOURSUSER course_rel_user, ".$TABLE_ACCESS_URL_REL_COURSE." url - WHERE course.code = course_rel_user.course_code AND url.course_code = course.code - AND course_rel_user.user_id = '".$_user['user_id']."' - AND course_rel_user.relation_type<>".COURSE_RELATION_TYPE_RRHH." - AND course_rel_user.user_course_cat='".$user_category_id."' $without_special_courses "; - // If multiple URL access mode is enabled, only fetch courses - // corresponding to the current URL. - if ($_configuration['multiple_access_urls'] && $current_url_id != -1){ - $sql_select_courses .= " AND url.course_code=course.code AND access_url_id='".$current_url_id."'"; - } - // Use user's classification for courses (if any). - $sql_select_courses .= " ORDER BY course_rel_user.user_course_cat, course_rel_user.sort ASC"; - $result = Database::query($sql_select_courses); - $number_of_courses = Database::num_rows($result); - $key = 0; - $status_icon = ''; - - // Browse through all courses. - while ($course = Database::fetch_array($result)) { - // Get notifications. - $my_course = array(); - $my_course['db'] = $course['db_name']; - $my_course['k'] = $course['code']; - $my_course['id_session'] = null; - $my_course['s'] = $course['status']; - // For each course, get if there is any notification icon to show - // (something that would have changed since the user's last visit). - $show_notification = show_notification($my_course); - // New code displaying the user's status in respect to this course. - $status_icon = Display::return_icon('blackboard.png', get_lang('Course'), array('width' => '48px')); - /* - // Old code displaying the status of the user in respect to this course - if ($course['status'] == COURSEMANAGER) { - $status_icon=Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('teachers.gif', get_lang('Status').': '.get_lang('Teacher'), array('style' => 'width: 11px; height: 11px;')); - } elseif (($course['status'] == STUDENT && !api_is_coach()) || empty($course['status'])) { - $status_icon=Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('students.gif', get_lang('Status').': '.get_lang('Student'), array('style' => 'width: 11px; height: 11px;')); - }*/ - - /* - // Code allowing to show the thematic progress (as a percentage) inside the course box - if (api_is_allowed_to_edit(null, true)) { - $progress_thematic_icon = ''.get_thematic_progress_icon($course['db_name']).''; - } else { - $progress_thematic_icon = get_thematic_progress_icon($course['db_name']); - } - */ - - echo '
'; - - if (api_is_platform_admin()) { - echo '
'.Display::return_icon('edit.gif', get_lang('Edit'), array('align' => 'absmiddle')).''; - if ($course['status'] == COURSEMANAGER) { - //echo Display::return_icon('teachers.gif', get_lang('Status').': '.get_lang('Teacher'), array('style'=>'width: 11px; height: 11px;')); - } - echo '
'; - } - - // Function logic - act on the data (check if the course is virtual, if yes change the link). - $is_virtual_course = CourseManager :: is_virtual_course_from_system_code($course['code']); - if ($is_virtual_course) { - // If the current user is also subscribed in the real course to which this - // virtual course is linked, we don't need to display the virtual course entry in - // the course list - it is combined with the real course entry. - $target_course_code = CourseManager :: get_target_of_linked_course($course['code']); - $is_subscribed_in_target_course = CourseManager :: is_user_subscribed_in_course(api_get_user_id(), $target_course_code); - if ($is_subscribed_in_target_course) { - return; // Do not display this course entry. - } - } - // Check if the course has virtual courses attached. If yes change the course title and display code. - $has_virtual_courses = CourseManager :: has_virtual_courses_from_code($course['code'], api_get_user_id()); - if ($has_virtual_courses) { - $course_info = api_get_course_info($course['code']); - $return_result = CourseManager :: determine_course_title_from_course_info(api_get_user_id(), $course_info); - $course_title = $return_result['title']; - $course_display_code = $return_result['code']; - } else { - $course_title = $course['title']; - $course_display_code = $course['visual_code']; - } - - // Show a hyperlink to the course, unless the course is closed and user is not course admin. - $course_visibility = $course['visibility']; - if ($course_visibility != COURSE_VISIBILITY_CLOSED || $course['status'] == COURSEMANAGER) { - $course_title = ''.$course['title'].''; - } else { - $course_title = $course['title']." ".get_lang('CourseClosed'); - } - // Start displaying the course block itself. - echo '
'.$status_icon.'
'.$course_title.'
'; - if (api_get_setting('display_coursecode_in_courselist') == 'true') { - echo $course_display_code; - } - if (api_get_setting('display_coursecode_in_courselist') == 'true' && api_get_setting('display_teacher_in_courselist') == 'true') { - echo ' - '; - } - if (api_get_setting('display_teacher_in_courselist') == 'true') { - if (!empty($course['tutor'])) - echo $course['tutor']; - } - // Show notifications. - echo $show_notification; - echo '
'; - $key++; - } -} - -/* Display functions */ - -/** - * get icon showing thematic progress for a course - * @param string Course database name - * @param int Session id (optional) - * @return string img html - */ -function get_thematic_progress_icon($course_dbname,$session_id = 0) { - $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION,$course_dbname); - $session_id = intval($session_id); - $sql = "SELECT progress FROM $tbl_course_description WHERE description_type = 8 AND session_id = '$session_id' "; - $rs = Database::query($sql); - $img = ''; - $title = '0%'; - $image = 'level_0.png'; - if (Database::num_rows($rs) > 0) { - $row = Database::fetch_array($rs); - $progress = $row['progress']; - $image = 'level_'.$progress.'.png'; - $title = $row['progress'].'%'; - $img = Display::return_icon($image, get_lang('ThematicAdvance'), array('style' => 'vertical-align: middle')).' '.$title.''; - } - return $img; - } - - /** * Warning: This function defines a global variable. * @todo Use the correct get_path function. @@ -519,7 +302,7 @@ function display_digest($toolsList, $digest, $orderKey, $courses) { * @todo add a parameter user_id so that it is possible to show the courselist of other users (=generalisation). This will prevent having to write a new function for this. */ function get_logged_user_course_html($course, $session_id = 0, $class = 'courses') { - global $nosession; + global $nosession, $nbDigestEntries, $digest, $thisCourseSysCode, $orderKey; $charset = api_get_system_encoding(); $current_uid = api_get_user_id(); @@ -627,15 +410,6 @@ function get_logged_user_course_html($course, $session_id = 0, $class = 'courses $result .= $course_display_title.' '.get_lang('CourseClosed'); } - /* - if (api_is_allowed_to_edit(null, true)) { - $progress_thematic_icon = ''.get_thematic_progress_icon($course_database, $session_id).''; - } else { - $progress_thematic_icon = get_thematic_progress_icon($course_database, $session_id); - } - */ - - //$result .= '  '.$progress_thematic_icon.''; // Show the course_code and teacher if chosen to display this. if (api_get_setting('display_coursecode_in_courselist') == 'true' || api_get_setting('display_teacher_in_courselist') == 'true') { $result .= '
'; @@ -1132,7 +906,7 @@ if (is_array($courses_tree)) { // Sessions and courses that are not in a session category. if (!isset($_GET['history'])) { // Check if it's not history trainnign session list. CourseManager :: display_special_courses(api_get_user_id()); - display_courses(api_get_user_id()); + CourseManager :: display_courses(api_get_user_id()); } // Independent sessions. foreach ($category['sessions'] as $session) { From b07956be40c657737d677e4e8c414585622b156a Mon Sep 17 00:00:00 2001 From: ywarnier Date: Sun, 16 Jan 2011 16:51:58 -0500 Subject: [PATCH 5/9] Moved display functions from user_portal to course.lib.php and display.lib.php --- main/inc/lib/course.lib.php | 4 +-- main/inc/lib/display.lib.php | 37 ++++++++++++++++++++++ user_portal.php | 59 +++--------------------------------- 3 files changed, 43 insertions(+), 57 deletions(-) diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index 2a29ae641b..b45dd4dacb 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -2618,7 +2618,7 @@ class CourseManager { $all_user_categories = get_user_course_categories(); // Step 0: We display the course without a user category. - display_courses_in_category(0, 'true'); + self :: display_courses_in_category(0, 'true'); // Step 1: We get all the categories of the user. $tucc = Database::get_user_personal_table(TABLE_USER_COURSE_CATEGORY); @@ -2635,7 +2635,7 @@ class CourseManager { echo $row['title']; echo ''; echo ''; - display_courses_in_category($row['id']); + self :: display_courses_in_category($row['id']); echo ''; echo ''; } diff --git a/main/inc/lib/display.lib.php b/main/inc/lib/display.lib.php index 4b26f1e691..10cc8a72b9 100755 --- a/main/inc/lib/display.lib.php +++ b/main/inc/lib/display.lib.php @@ -935,5 +935,42 @@ class Display { } }); */ } + /** + * Display create course link + * + */ + function display_create_course_link() { + echo '
  • '.(api_get_setting('course_validation') == 'true' ? get_lang('CreateCourseRequest') : get_lang('CourseCreate')).'
  • '; + } + + /** + * Display dashboard link + * + */ + function display_dashboard_link() { + echo '
  • '.get_lang('Dashboard').'
  • '; + } + + /** + * Display edit course list links + * + */ + function display_edit_course_list_links() { + echo '
  • '.get_lang('CourseManagement').'
  • '; + } + + /** + * Show history sessions + * + */ + function display_history_course_session() { + if (api_get_setting('use_session_mode') == 'true') { + if (isset($_GET['history']) && intval($_GET['history']) == 1) { + echo '
  • '.get_lang('DisplayTrainingList').'
  • '; + } else { + echo '
  • '.get_lang('HistoryTrainingSessions').'
  • '; + } + } + } } //end class Display \ No newline at end of file diff --git a/user_portal.php b/user_portal.php index 63bc6a46dc..dabae3ad52 100755 --- a/user_portal.php +++ b/user_portal.php @@ -153,9 +153,6 @@ Display :: display_header($nameTools); /* FUNCTIONS - display_admin_links() - display_create_course_link() - display_edit_course_list_links() display_digest($toolsList, $digest, $orderKey, $courses) show_notification($my_course) @@ -163,54 +160,6 @@ Display :: display_header($nameTools); get_user_course_categories() */ -/** - * Warning: This function defines a global variable. - * @todo Use the correct get_path function. - */ -function display_admin_links() { - global $rootAdminWeb; - echo '
  • '.get_lang('PlatformAdmin').'
  • '; -} - -/** - * Display create course link - * - */ -function display_create_course_link() { - echo '
  • '.(api_get_setting('course_validation') == 'true' ? get_lang('CreateCourseRequest') : get_lang('CourseCreate')).'
  • '; -} - - -/** - * Display dashboard link - * - */ -function display_dashboard_link() { - echo '
  • '.get_lang('Dashboard').'
  • '; -} - -/** - * Display edit course list links - * - */ -function display_edit_course_list_links() { - echo '
  • '.get_lang('CourseManagement').'
  • '; -} - -/** - * Show history sessions - * - */ -function display_history_course_session() { - if (api_get_setting('use_session_mode') == 'true') { - if (isset($_GET['history']) && intval($_GET['history']) == 1) { - echo '
  • '.get_lang('DisplayTrainingList').'
  • '; - } else { - echo '
  • '.get_lang('HistoryTrainingSessions').'
  • '; - } - } -} - /** * Displays a digest e.g. short summary of new agenda and announcements items. * This used to be displayed in the right hand menu, but is now @@ -1277,14 +1226,14 @@ echo ''.get_lang('MenuUser').''; if ($show_menu) { echo ''; } From c326220aa5b9a59cecdc5e05bcb013e36fda00ba Mon Sep 17 00:00:00 2001 From: ywarnier Date: Sun, 16 Jan 2011 17:58:05 -0500 Subject: [PATCH 9/9] Moved get_session_title_box() and get_logged_user_course_html() from user_portal to display.lib.php and course.lib.php --- main/inc/lib/course.lib.php | 256 +++++++++++++++++++++++++++ main/inc/lib/display.lib.php | 50 ++++++ user_portal.php | 325 +---------------------------------- 3 files changed, 310 insertions(+), 321 deletions(-) diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index e06f2f7955..5b0fe91b48 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -2784,4 +2784,260 @@ class CourseManager { } return $output; } + /** + * Display code for one specific course a logged in user is subscribed to. + * Shows a link to the course, what's new icons... + * + * $my_course['d'] - course directory + * $my_course['i'] - course title + * $my_course['c'] - visual course code + * $my_course['k'] - system course code + * $my_course['db'] - course database + * + * @version 1.0.3 + * @todo refactor into different functions for database calls | logic | display + * @todo replace single-character $my_course['d'] indices + * @todo move code for what's new icons to a separate function to clear things up + * @todo add a parameter user_id so that it is possible to show the courselist of other users (=generalisation). This will prevent having to write a new function for this. + */ + function get_logged_user_course_html($course, $session_id = 0, $class = 'courses') { + global $nosession, $nbDigestEntries, $digest, $thisCourseSysCode, $orderKey; + $charset = api_get_system_encoding(); + + $current_uid = api_get_user_id(); + $info = api_get_course_info($course['code']); + $status_course = CourseManager::get_user_in_course_status($current_uid, $course['code']); + + if (!is_array($course['code'])) { + $my_course = api_get_course_info($course['code']); + $my_course['k'] = $my_course['id']; + $my_course['db'] = $my_course['dbName']; + $my_course['c'] = $my_course['official_code']; + $my_course['i'] = $my_course['name']; + $my_course['d'] = $my_course['path']; + $my_course['t'] = $my_course['titular']; + $my_course['id_session'] = $session_id; + $my_course['status'] = empty($session_id) ? $status_course : 5; + } + + if (api_get_setting('use_session_mode') == 'true' && !$nosession) { + global $now, $date_start, $date_end; + } + + // Initialise. + $result = ''; + + // Table definitions + //$statistic_database = Database::get_statistic_database(); + $main_user_table = Database :: get_main_table(TABLE_MAIN_USER); + $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); + $tbl_session_category = Database :: get_main_table(TABLE_MAIN_SESSION_CATEGORY); + $course_database = $my_course['db']; + $course_tool_table = Database :: get_course_table(TABLE_TOOL_LIST, $course_database); + $tool_edit_table = Database :: get_course_table(TABLE_ITEM_PROPERTY, $course_database); + $course_group_user_table = Database :: get_course_table(TOOL_USER, $course_database); + + $user_id = api_get_user_id(); + $course_system_code = $my_course['k']; + $course_visual_code = $my_course['c']; + $course_title = $my_course['i']; + $course_directory = $my_course['d']; + $course_teacher = $my_course['t']; + $course_teacher_email = isset($my_course['email']) ? $my_course['email'] : ''; + $course_info = Database :: get_course_info($course_system_code); + $course_access_settings = CourseManager :: get_access_settings($course_system_code); + $course_id = isset($course_info['course_id']) ? $course_info['course_id'] : null; + $course_visibility = $course_access_settings['visibility']; + + $user_in_course_status = CourseManager :: get_user_in_course_status(api_get_user_id(), $course_system_code); + + // Function logic - act on the data. + $is_virtual_course = CourseManager :: is_virtual_course_from_system_code($my_course['k']); + if ($is_virtual_course) { + // If the current user is also subscribed in the real course to which this + // virtual course is linked, we don't need to display the virtual course entry in + // the course list - it is combined with the real course entry. + $target_course_code = CourseManager :: get_target_of_linked_course($course_system_code); + $is_subscribed_in_target_course = CourseManager :: is_user_subscribed_in_course(api_get_user_id(), $target_course_code); + if ($is_subscribed_in_target_course) { + return; //do not display this course entry + } + } + $has_virtual_courses = CourseManager :: has_virtual_courses_from_code($course_system_code, api_get_user_id()); + if ($has_virtual_courses) { + $return_result = CourseManager :: determine_course_title_from_course_info(api_get_user_id(), $course_info); + $course_display_title = $return_result['title']; + $course_display_code = $return_result['code']; + } else { + $course_display_title = $course_title; + $course_display_code = $course_visual_code; + } + + $s_course_status = $my_course['status']; + $is_coach = api_is_coach($my_course['id_session'],$course['code']); + + $s_htlm_status_icon = ''; + + $s_htlm_status_icon =Display::return_icon('blackboard_blue.png', get_lang('Course'), array('width' => '48px')); + /* + if ($s_course_status == 1) { + $s_htlm_status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('teachers.gif', get_lang('Status').': '.get_lang('Teacher'), array('style' => 'width: 11px; height: 11px;')); + } + if ($s_course_status == 2 || ($is_coach && $s_course_status != 1)) { + $s_htlm_status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('coachs.gif', get_lang('Status').': '.get_lang('GeneralCoach'), array('style' => 'width: 11px; height: 11px;')); + } + if (($s_course_status == 5 && !$is_coach) || empty($s_course_status)) { + $s_htlm_status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('students.gif', get_lang('Status').': '.get_lang('Student'), array('style' => 'width: 11px; height: 11px;')); + } + */ + // Display course entry. + $result.="\n\t"; + $result .= '
  • '.$s_htlm_status_icon.'
    '; + // Show a hyperlink to the course, unless the course is closed and user is not course admin. + if ($course_visibility != COURSE_VISIBILITY_CLOSED || $user_in_course_status == COURSEMANAGER) { + if (api_get_setting('use_session_mode') == 'true' && !$nosession) { + if (empty($my_course['id_session'])) { + $my_course['id_session'] = 0; + } + if ($user_in_course_status == COURSEMANAGER || ($date_start <= $now && $date_end >= $now) || $date_start == '0000-00-00') { + $result .= ''.$course_display_title.''; + } + } else { + $result .= ''.$course_display_title.''; + } + } else { + $result .= $course_display_title.' '.get_lang('CourseClosed'); + } + + // Show the course_code and teacher if chosen to display this. + if (api_get_setting('display_coursecode_in_courselist') == 'true' || api_get_setting('display_teacher_in_courselist') == 'true') { + $result .= '
    '; + } + + if (api_get_setting('display_coursecode_in_courselist') == 'true') { + $result .= $course_display_code; + } + + if (api_get_setting('display_teacher_in_courselist') == 'true') { + if (api_get_setting('use_session_mode')=='true' && !$nosession) { + $coachs_course = api_get_coachs_from_course($my_course['id_session'], $course['code']); + $course_coachs = array(); + if (is_array($coachs_course)) { + foreach ($coachs_course as $coach_course) { + $course_coachs[] = api_get_person_name($coach_course['firstname'], $coach_course['lastname']); + } + } + + if ($s_course_status == 1 || ($s_course_status == 5 && empty($my_course['id_session'])) || empty($s_course_status)) { + $result .= $course_teacher; + } + + if (($s_course_status == 5 && !empty($my_course['id_session'])) || ($is_coach && $s_course_status != 1)) { + if (is_array($course_coachs) && count($course_coachs)> 0 ) { + if (api_get_setting('display_coursecode_in_courselist') == 'true' && api_get_setting('display_teacher_in_courselist') == 'true') { + $result .= ' – '; + } + $result .= get_lang('Coachs').': '.implode(', ',$course_coachs); + } + } + + } else { + $result .= $course_teacher; + } + + if(!empty($course_teacher_email)) { + $result .= ' ('.$course_teacher_email.')'; + } + } + + $result .= isset($course['special_course']) ? ' '.Display::return_icon('klipper.png', get_lang('CourseAutoRegister')) : ''; + + $current_course_settings = CourseManager :: get_access_settings($my_course['k']); + + // Display the "what's new" icons. + $result .= Display :: show_notification($my_course); + + if ((CONFVAL_showExtractInfo == SCRIPTVAL_InCourseList || CONFVAL_showExtractInfo == SCRIPTVAL_Both) && $nbDigestEntries > 0) { + + reset($digest); + $result .= ' +
      '; + while (list($key2) = each($digest[$thisCourseSysCode])) { + $result .= '
    • '; + if ($orderKey[1] == 'keyTools') { + $result .= ""; + $result .= "$toolsList[$key2][\"name\"]"; + } else { + $result .= api_convert_and_format_date($key2, DATE_FORMAT_LONG, date_default_timezone_get()); + } + $result .= '
    • '; + $result .= '
        '; + reset ($digest[$thisCourseSysCode][$key2]); + while (list ($key3, $dataFromCourse) = each($digest[$thisCourseSysCode][$key2])) { + $result .= '
      • '; + if ($orderKey[2] == 'keyTools') { + $result .= ""; + $result .= "$toolsList[$key3][\"name\"]"; + } else { + $result .= api_convert_and_format_date($key3, DATE_FORMAT_LONG, date_default_timezone_get()); + } + $result .= '
          '; + reset($digest[$thisCourseSysCode][$key2][$key3]); + while (list ($key4, $dataFromCourse) = each($digest[$thisCourseSysCode][$key2][$key3])) { + $result .= '
        • '; + $result .= @htmlspecialchars(api_substr(strip_tags($dataFromCourse), 0, CONFVAL_NB_CHAR_FROM_CONTENT), ENT_QUOTES, $charset); + $result .= '
        • '; + } + $result .= '
        '; + $result .= '
      • '; + } + $result .= '
      '; + $result .= ''; + } + $result .= '
    '; + } + $result .= '
  • '; + + if (api_get_setting('use_session_mode') == 'true' && !$nosession) { + $session = ''; + $active = false; + if (!empty($my_course['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) $my_course['id_session']. ' LIMIT 1'; + + $rs = Database::query($sql); + $sessioncoach = Database::store_result($rs); + $sessioncoach = $sessioncoach[0]; + + $session = array(); + $session['title'] = $my_course['session_name']; + $session_category_id = CourseManager::get_session_category_id_by_session_id($my_course['id_session']); + $session['category'] = $sessioncoach['name']; + if ($my_course['date_start'] == '0000-00-00') { + $session['dates'] = get_lang('WithoutTimeLimits'); + if (api_get_setting('show_session_coach') === 'true') { + $session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($sessioncoach['firstname'], $sessioncoach['lastname']); + } + $active = true; + } else { + $session ['dates'] = ' - '.get_lang('From').' '.$my_course['date_start'].' '.get_lang('To').' '.$my_course['date_end']; + if (api_get_setting('show_session_coach') === 'true') { + $session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($sessioncoach['firstname'], $sessioncoach['lastname']); + } + $active = ($date_start <= $now && $date_end >= $now); + } + } + $output = array ($my_course['user_course_cat'], $result, $my_course['id_session'], $session, 'active' => $active, 'session_category_id' => $session_category_id); + } else { + $output = array ($my_course['user_course_cat'], $result); + } + + return $output; + } } //end class CourseManager diff --git a/main/inc/lib/display.lib.php b/main/inc/lib/display.lib.php index 66afb1b8c5..5502b8cb07 100755 --- a/main/inc/lib/display.lib.php +++ b/main/inc/lib/display.lib.php @@ -1137,4 +1137,54 @@ class Display { } } } // End function display_digest + /** + * Get the session box details as an array + * @param int Session ID + * @return array Empty array or session array ['title'=>'...','category'=>'','dates'=>'...','coach'=>'...','active'=>true/false,'session_category_id'=>int] + */ + function get_session_title_box($session_id) { + global $nosession; + + if (api_get_setting('use_session_mode') == 'true' && !$nosession) { + global $now, $date_start, $date_end; + } + + $output = array(); + if (api_get_setting('use_session_mode') == 'true' && !$nosession) { + $main_user_table = Database :: get_main_table(TABLE_MAIN_USER); + $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); + $tbl_session_category = Database :: get_main_table(TABLE_MAIN_SESSION_CATEGORY); + $active = false; + // Request for the name of the general coach + $sql ='SELECT tu.lastname, tu.firstname, ts.name, ts.date_start, ts.date_end, ts.session_category_id + FROM '.$tbl_session.' ts + LEFT JOIN '.$main_user_table .' tu + ON ts.id_coach = tu.user_id + WHERE ts.id='.intval($session_id); + $rs = Database::query($sql); + $session_info = Database::store_result($rs); + $session_info = $session_info[0]; + $session = array(); + $session['title'] = $session_info[2]; + $session['coach'] = ''; + + if ($session_info[3] == '0000-00-00') { + $session['dates'] = get_lang('WithoutTimeLimits'); + if (api_get_setting('show_session_coach') === 'true') { + $session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($session_info[1], $session_info[0]); + } + $active = true; + } else { + $session ['dates'] = get_lang('From').' '.$session_info[3].' '.get_lang('Until').' '.$session_info[4]; + if ( api_get_setting('show_session_coach') === 'true' ) { + $session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($session_info[1], $session_info[0]); + } + $active = ($date_start <= $now && $date_end >= $now); + } + $session['active'] = $active; + $session['session_category_id'] = $session_info[5]; + $output = $session; + } + return $output; + } } //end class Display \ No newline at end of file diff --git a/user_portal.php b/user_portal.php index 66b9a58ecd..674180777f 100755 --- a/user_portal.php +++ b/user_portal.php @@ -149,322 +149,6 @@ if (CONFVAL_showExtractInfo != SCRIPTVAL_UnderCourseList and $orderKey[0] != 'ke */ Display :: display_header($nameTools); - -/* - FUNCTIONS - get_logged_user_course_html($my_course) -*/ - - - -/** - * Display code for one specific course a logged in user is subscribed to. - * Shows a link to the course, what's new icons... - * - * $my_course['d'] - course directory - * $my_course['i'] - course title - * $my_course['c'] - visual course code - * $my_course['k'] - system course code - * $my_course['db'] - course database - * - * @version 1.0.3 - * @todo refactor into different functions for database calls | logic | display - * @todo replace single-character $my_course['d'] indices - * @todo move code for what's new icons to a separate function to clear things up - * @todo add a parameter user_id so that it is possible to show the courselist of other users (=generalisation). This will prevent having to write a new function for this. - */ -function get_logged_user_course_html($course, $session_id = 0, $class = 'courses') { - global $nosession, $nbDigestEntries, $digest, $thisCourseSysCode, $orderKey; - $charset = api_get_system_encoding(); - - $current_uid = api_get_user_id(); - $info = api_get_course_info($course['code']); - $status_course = CourseManager::get_user_in_course_status($current_uid, $course['code']); - - if (!is_array($course['code'])) { - $my_course = api_get_course_info($course['code']); - $my_course['k'] = $my_course['id']; - $my_course['db'] = $my_course['dbName']; - $my_course['c'] = $my_course['official_code']; - $my_course['i'] = $my_course['name']; - $my_course['d'] = $my_course['path']; - $my_course['t'] = $my_course['titular']; - $my_course['id_session'] = $session_id; - $my_course['status'] = empty($session_id) ? $status_course : 5; - } - - if (api_get_setting('use_session_mode') == 'true' && !$nosession) { - global $now, $date_start, $date_end; - } - - // Initialise. - $result = ''; - - // Table definitions - //$statistic_database = Database::get_statistic_database(); - $main_user_table = Database :: get_main_table(TABLE_MAIN_USER); - $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); - $tbl_session_category = Database :: get_main_table(TABLE_MAIN_SESSION_CATEGORY); - $course_database = $my_course['db']; - $course_tool_table = Database :: get_course_table(TABLE_TOOL_LIST, $course_database); - $tool_edit_table = Database :: get_course_table(TABLE_ITEM_PROPERTY, $course_database); - $course_group_user_table = Database :: get_course_table(TOOL_USER, $course_database); - - $user_id = api_get_user_id(); - $course_system_code = $my_course['k']; - $course_visual_code = $my_course['c']; - $course_title = $my_course['i']; - $course_directory = $my_course['d']; - $course_teacher = $my_course['t']; - $course_teacher_email = isset($my_course['email']) ? $my_course['email'] : ''; - $course_info = Database :: get_course_info($course_system_code); - $course_access_settings = CourseManager :: get_access_settings($course_system_code); - $course_id = isset($course_info['course_id']) ? $course_info['course_id'] : null; - $course_visibility = $course_access_settings['visibility']; - - $user_in_course_status = CourseManager :: get_user_in_course_status(api_get_user_id(), $course_system_code); - - // Function logic - act on the data. - $is_virtual_course = CourseManager :: is_virtual_course_from_system_code($my_course['k']); - if ($is_virtual_course) { - // If the current user is also subscribed in the real course to which this - // virtual course is linked, we don't need to display the virtual course entry in - // the course list - it is combined with the real course entry. - $target_course_code = CourseManager :: get_target_of_linked_course($course_system_code); - $is_subscribed_in_target_course = CourseManager :: is_user_subscribed_in_course(api_get_user_id(), $target_course_code); - if ($is_subscribed_in_target_course) { - return; //do not display this course entry - } - } - $has_virtual_courses = CourseManager :: has_virtual_courses_from_code($course_system_code, api_get_user_id()); - if ($has_virtual_courses) { - $return_result = CourseManager :: determine_course_title_from_course_info(api_get_user_id(), $course_info); - $course_display_title = $return_result['title']; - $course_display_code = $return_result['code']; - } else { - $course_display_title = $course_title; - $course_display_code = $course_visual_code; - } - - $s_course_status = $my_course['status']; - $is_coach = api_is_coach($my_course['id_session'],$course['code']); - - $s_htlm_status_icon = ''; - - $s_htlm_status_icon =Display::return_icon('blackboard_blue.png', get_lang('Course'), array('width' => '48px')); - /* - if ($s_course_status == 1) { - $s_htlm_status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('teachers.gif', get_lang('Status').': '.get_lang('Teacher'), array('style' => 'width: 11px; height: 11px;')); - } - if ($s_course_status == 2 || ($is_coach && $s_course_status != 1)) { - $s_htlm_status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('coachs.gif', get_lang('Status').': '.get_lang('GeneralCoach'), array('style' => 'width: 11px; height: 11px;')); - } - if (($s_course_status == 5 && !$is_coach) || empty($s_course_status)) { - $s_htlm_status_icon = Display::return_icon('course.gif', get_lang('Course')).' '.Display::return_icon('students.gif', get_lang('Status').': '.get_lang('Student'), array('style' => 'width: 11px; height: 11px;')); - } - */ - // Display course entry. - $result.="\n\t"; - $result .= '
  • '.$s_htlm_status_icon.'
    '; - // Show a hyperlink to the course, unless the course is closed and user is not course admin. - if ($course_visibility != COURSE_VISIBILITY_CLOSED || $user_in_course_status == COURSEMANAGER) { - if (api_get_setting('use_session_mode') == 'true' && !$nosession) { - if (empty($my_course['id_session'])) { - $my_course['id_session'] = 0; - } - if ($user_in_course_status == COURSEMANAGER || ($date_start <= $now && $date_end >= $now) || $date_start == '0000-00-00') { - $result .= ''.$course_display_title.''; - } - } else { - $result .= ''.$course_display_title.''; - } - } else { - $result .= $course_display_title.' '.get_lang('CourseClosed'); - } - - // Show the course_code and teacher if chosen to display this. - if (api_get_setting('display_coursecode_in_courselist') == 'true' || api_get_setting('display_teacher_in_courselist') == 'true') { - $result .= '
    '; - } - - if (api_get_setting('display_coursecode_in_courselist') == 'true') { - $result .= $course_display_code; - } - - if (api_get_setting('display_teacher_in_courselist') == 'true') { - if (api_get_setting('use_session_mode')=='true' && !$nosession) { - $coachs_course = api_get_coachs_from_course($my_course['id_session'], $course['code']); - $course_coachs = array(); - if (is_array($coachs_course)) { - foreach ($coachs_course as $coach_course) { - $course_coachs[] = api_get_person_name($coach_course['firstname'], $coach_course['lastname']); - } - } - - if ($s_course_status == 1 || ($s_course_status == 5 && empty($my_course['id_session'])) || empty($s_course_status)) { - $result .= $course_teacher; - } - - if (($s_course_status == 5 && !empty($my_course['id_session'])) || ($is_coach && $s_course_status != 1)) { - if (is_array($course_coachs) && count($course_coachs)> 0 ) { - if (api_get_setting('display_coursecode_in_courselist') == 'true' && api_get_setting('display_teacher_in_courselist') == 'true') { - $result .= ' – '; - } - $result .= get_lang('Coachs').': '.implode(', ',$course_coachs); - } - } - - } else { - $result .= $course_teacher; - } - - if(!empty($course_teacher_email)) { - $result .= ' ('.$course_teacher_email.')'; - } - } - - $result .= isset($course['special_course']) ? ' '.Display::return_icon('klipper.png', get_lang('CourseAutoRegister')) : ''; - - $current_course_settings = CourseManager :: get_access_settings($my_course['k']); - - // Display the "what's new" icons. - $result .= Display :: show_notification($my_course); - - if ((CONFVAL_showExtractInfo == SCRIPTVAL_InCourseList || CONFVAL_showExtractInfo == SCRIPTVAL_Both) && $nbDigestEntries > 0) { - - reset($digest); - $result .= ' -
      '; - while (list($key2) = each($digest[$thisCourseSysCode])) { - $result .= '
    • '; - if ($orderKey[1] == 'keyTools') { - $result .= ""; - $result .= "$toolsList[$key2][\"name\"]"; - } else { - $result .= api_convert_and_format_date($key2, DATE_FORMAT_LONG, date_default_timezone_get()); - } - $result .= '
    • '; - $result .= '
        '; - reset ($digest[$thisCourseSysCode][$key2]); - while (list ($key3, $dataFromCourse) = each($digest[$thisCourseSysCode][$key2])) { - $result .= '
      • '; - if ($orderKey[2] == 'keyTools') { - $result .= ""; - $result .= "$toolsList[$key3][\"name\"]"; - } else { - $result .= api_convert_and_format_date($key3, DATE_FORMAT_LONG, date_default_timezone_get()); - } - $result .= '
          '; - reset($digest[$thisCourseSysCode][$key2][$key3]); - while (list ($key4, $dataFromCourse) = each($digest[$thisCourseSysCode][$key2][$key3])) { - $result .= '
        • '; - $result .= @htmlspecialchars(api_substr(strip_tags($dataFromCourse), 0, CONFVAL_NB_CHAR_FROM_CONTENT), ENT_QUOTES, $charset); - $result .= '
        • '; - } - $result .= '
        '; - $result .= '
      • '; - } - $result .= '
      '; - $result .= ''; - } - $result .= '
    '; - } - $result .= '
  • '; - - if (api_get_setting('use_session_mode') == 'true' && !$nosession) { - $session = ''; - $active = false; - if (!empty($my_course['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) $my_course['id_session']. ' LIMIT 1'; - - $rs = Database::query($sql); - $sessioncoach = Database::store_result($rs); - $sessioncoach = $sessioncoach[0]; - - $session = array(); - $session['title'] = $my_course['session_name']; - $session_category_id = CourseManager::get_session_category_id_by_session_id($my_course['id_session']); - $session['category'] = $sessioncoach['name']; - if ($my_course['date_start'] == '0000-00-00') { - $session['dates'] = get_lang('WithoutTimeLimits'); - if (api_get_setting('show_session_coach') === 'true') { - $session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($sessioncoach['firstname'], $sessioncoach['lastname']); - } - $active = true; - } else { - $session ['dates'] = ' - '.get_lang('From').' '.$my_course['date_start'].' '.get_lang('To').' '.$my_course['date_end']; - if (api_get_setting('show_session_coach') === 'true') { - $session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($sessioncoach['firstname'], $sessioncoach['lastname']); - } - $active = ($date_start <= $now && $date_end >= $now); - } - } - $output = array ($my_course['user_course_cat'], $result, $my_course['id_session'], $session, 'active' => $active, 'session_category_id' => $session_category_id); - } else { - $output = array ($my_course['user_course_cat'], $result); - } - - return $output; -} - -/** - * Get the session box details as an array - * @param int Session ID - * @return array Empty array or session array ['title'=>'...','category'=>'','dates'=>'...','coach'=>'...','active'=>true/false,'session_category_id'=>int] - */ -function get_session_title_box($session_id) { - global $nosession; - - if (api_get_setting('use_session_mode') == 'true' && !$nosession) { - global $now, $date_start, $date_end; - } - - $output = array(); - if (api_get_setting('use_session_mode') == 'true' && !$nosession) { - $main_user_table = Database :: get_main_table(TABLE_MAIN_USER); - $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); - $tbl_session_category = Database :: get_main_table(TABLE_MAIN_SESSION_CATEGORY); - $active = false; - // Request for the name of the general coach - $sql ='SELECT tu.lastname, tu.firstname, ts.name, ts.date_start, ts.date_end, ts.session_category_id - FROM '.$tbl_session.' ts - LEFT JOIN '.$main_user_table .' tu - ON ts.id_coach = tu.user_id - WHERE ts.id='.intval($session_id); - $rs = Database::query($sql); - $session_info = Database::store_result($rs); - $session_info = $session_info[0]; - $session = array(); - $session['title'] = $session_info[2]; - $session['coach'] = ''; - - if ($session_info[3] == '0000-00-00') { - $session['dates'] = get_lang('WithoutTimeLimits'); - if (api_get_setting('show_session_coach') === 'true') { - $session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($session_info[1], $session_info[0]); - } - $active = true; - } else { - $session ['dates'] = get_lang('From').' '.$session_info[3].' '.get_lang('Until').' '.$session_info[4]; - if ( api_get_setting('show_session_coach') === 'true' ) { - $session['coach'] = get_lang('GeneralCoach').': '.api_get_person_name($session_info[1], $session_info[0]); - } - $active = ($date_start <= $now && $date_end >= $now); - } - $session['active'] = $active; - $session['session_category_id'] = $session_info[5]; - $output = $session; - } - return $output; -} - /* MAIN CODE */ /* PERSONAL COURSE LIST */ @@ -621,7 +305,6 @@ if (!empty ($_GET['include']) && preg_match('/^[a-zA-Z0-9_-]*\.html$/',$_GET['in Take collected data and display it. */ - //$list[] = get_logged_user_course_html($my_course); } // End while mycourse... } @@ -660,7 +343,7 @@ if (is_array($courses_tree)) { $allowed_time = strtotime($date_session_start); } if ($session_now > $allowed_time) { - $c = get_logged_user_course_html($course, $session['details']['id'], 'session_course_item'); + $c = CourseManager :: get_logged_user_course_html($course, $session['details']['id'], 'session_course_item'); $html_courses_session .= $c[1]; $count_courses_session++; } @@ -675,7 +358,7 @@ if (is_array($courses_tree)) { echo Display::return_icon('window_list.png', get_lang('Expand').'/'.get_lang('Hide'), array('width' => '48px', 'align' => 'absmiddle', 'id' => 'session_img_'.$session['details']['id'])) . ' '; - $s = get_session_title_box($session['details']['id']); + $s = Display :: get_session_title_box($session['details']['id']); $extra_info = (!empty($s['coach']) ? $s['coach'].' | ' : '').$s['dates']; //var_dump($s); //echo get_lang('SessionName') . ': ' . $s['title']. ' - '.(!empty($s['coach']) ? $s['coach'].' - ' : '').$s['dates']; @@ -714,7 +397,7 @@ if (is_array($courses_tree)) { $allowed_time = strtotime($date_session_start); } if ($session_now > $allowed_time) { - $c = get_logged_user_course_html($course, $session['details']['id'], 'session_course_item'); + $c = CourseManager :: get_logged_user_course_html($course, $session['details']['id'], 'session_course_item'); $html_courses_session .= $c[1]; $count_courses_session++; $count++; @@ -722,7 +405,7 @@ if (is_array($courses_tree)) { } if ($count > 0) { - $s = get_session_title_box($session['details']['id']); + $s = Display :: get_session_title_box($session['details']['id']); $html_sessions .= '
      '; $html_sessions .= '
    • '; //$html_sessions .= Display::return_icon('div_hide.gif', get_lang('Expand').'/'.get_lang('Hide'), array('align' => 'absmiddle', 'id' => 'session_img_'.$session['details']['id'])) . ' ';