'; //$htmlHeadXtra[] = ''; /* Table definitions */ // Database table definitions. $main_user_table = Database :: get_main_table(TABLE_MAIN_USER); $main_admin_table = Database :: get_main_table(TABLE_MAIN_ADMIN); $main_course_table = Database :: get_main_table(TABLE_MAIN_COURSE); $main_course_user_table = Database :: get_main_table(TABLE_MAIN_COURSE_USER); $main_category_table = Database :: get_main_table(TABLE_MAIN_CATEGORY); /* Constants and CONFIGURATION parameters */ // ---- Course list options ---- define('CONFVAL_showCourseLangIfNotSameThatPlatform', true); // Preview of course content // to disable all: set CONFVAL_maxTotalByCourse = 0 // to enable all: set e.g. CONFVAL_maxTotalByCourse = 5 // by default disabled since what's new icons are better (see function display_digest() ) define('CONFVAL_maxValvasByCourse', 2); // Maximum number of entries define('CONFVAL_maxAgendaByCourse', 2); // collected from each course define('CONFVAL_maxTotalByCourse', 0); // and displayed in summary. define('CONFVAL_NB_CHAR_FROM_CONTENT', 80); // Order to sort data $orderKey = array('keyTools', 'keyTime', 'keyCourse'); // default "best" Choice //$orderKey = array('keyTools', 'keyCourse', 'keyTime'); //$orderKey = array('keyCourse', 'keyTime', 'keyTools'); //$orderKey = array('keyCourse', 'keyTools', 'keyTime'); define('CONFVAL_showExtractInfo', SCRIPTVAL_UnderCourseList); // SCRIPTVAL_InCourseList // best choice if $orderKey[0] == 'keyCourse' // SCRIPTVAL_UnderCourseList // best choice // SCRIPTVAL_Both // probably only for debug //define('CONFVAL_dateFormatForInfosFromCourses', get_lang('dateFormatShort')); define('CONFVAL_dateFormatForInfosFromCourses', get_lang('dateFormatLong')); //define("CONFVAL_limitPreviewTo",SCRIPTVAL_NewEntriesOfTheDay); //define("CONFVAL_limitPreviewTo",SCRIPTVAL_NoTimeLimit); define("CONFVAL_limitPreviewTo", SCRIPTVAL_NewEntriesOfTheDayOfLastLogin); // This is the main function to get the course list. $personal_course_list = UserManager::get_personal_session_course_list($_user['user_id']); // Check if a user is enrolled only in one course for going directly to the course after the login. if (api_get_setting('go_to_course_after_login') == 'true') { if (!isset($_SESSION['coursesAlreadyVisited']) && is_array($personal_course_list) && count($personal_course_list) == 1) { $key = array_keys($personal_course_list); $course_info = $personal_course_list[$key[0]]; $course_directory = $course_info['d']; $id_session = isset($course_info['id_session']) ? $course_info['id_session'] : 0; header('location:'.api_get_path(WEB_COURSE_PATH).$course_directory.'/?id_session='.$id_session); exit; } } $nosession = false; if (api_get_setting('use_session_mode') == 'true' && !$nosession) { $display_actives = !isset($_GET['inactives']); } $nameTools = get_lang('MyCourses'); $this_section = SECTION_COURSES; /* Check configuration parameters integrity */ if (CONFVAL_showExtractInfo != SCRIPTVAL_UnderCourseList and $orderKey[0] != 'keyCourse') { // CONFVAL_showExtractInfo must be SCRIPTVAL_UnderCourseList to accept $orderKey[0] != 'keyCourse' if (DEBUG || api_is_platform_admin()){ // Show bug if admin. Else force a new order. die(' config error:'.__FILE__.'
set or '); } else { $orderKey = array('keyCourse', 'keyTools', 'keyTime'); } } /* Header Include the HTTP, HTML headers plus the top banner. */ 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) get_logged_user_course_html($my_course) 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 * disabled by default (see config settings in this file) because most people like * the what's new icons better. * * @version 1.0 */ function display_digest($toolsList, $digest, $orderKey, $courses) { if (is_array($digest) && (CONFVAL_showExtractInfo == SCRIPTVAL_UnderCourseList || CONFVAL_showExtractInfo == SCRIPTVAL_Both)) { // // // LEVEL 1 // // // reset($digest); echo "

    \n"; while (list($key1) = each($digest)) { if (is_array($digest[$key1])) { // // // Title of LEVEL 1 // // // echo "\n"; if ($orderKey[0] == 'keyTools') { $tools = $key1; echo $toolsList[$key1]['name']; } elseif ($orderKey[0] == 'keyCourse') { $courseSysCode = $key1; echo "", $courses[$key1]['courseCode'], "\n"; } elseif ($orderKey[0] == 'keyTime') { echo api_convert_and_format_date($digest[$key1], DATE_FORMAT_LONG, date_default_timezone_get()); } echo "\n"; // // // End Of Title of LEVEL 1 // // // // // // LEVEL 2 // // // reset($digest[$key1]); while (list ($key2) = each($digest[$key1])) { // // // Title of LEVEL 2 // // // echo "

    \n", "\n"; if ($orderKey[1] == 'keyTools') { $tools = $key2; echo $toolsList[$key2][name]; } elseif ($orderKey[1] == 'keyCourse') { $courseSysCode = $key2; echo "", $courses[$key2]['courseCode'], "\n"; } elseif ($orderKey[1] == 'keyTime') { echo api_convert_and_format_date($key2, DATE_FORMAT_LONG, date_default_timezone_get()); } echo "\n"; echo "

    "; // // // End Of Title of LEVEL 2 // // // // // // LEVEL 3 // // // reset($digest[$key1][$key2]); while (list ($key3, $dataFromCourse) = each($digest[$key1][$key2])) { // // // Title of LEVEL 3 // // // if ($orderKey[2] == 'keyTools') { $level3title = "".$toolsList[$key3]['name'].""; } elseif ($orderKey[2] == 'keyCourse') { $level3title = "• ".$courses[$key3]['courseCode']."\n"; } elseif ($orderKey[2] == 'keyTime') { $level3title = "• ".api_convert_and_format_date($key3, DATE_FORMAT_LONG, date_default_timezone_get()).""; } // // // End Of Title of LEVEL 3 // // // // // // LEVEL 4 (data) // // // reset($digest[$key1][$key2][$key3]); while (list ($key4, $dataFromCourse) = each($digest[$key1][$key2][$key3])) { echo $level3title, ' – ', api_substr(strip_tags($dataFromCourse), 0, CONFVAL_NB_CHAR_FROM_CONTENT); //adding ... (three dots) if the texts are too large and they are shortened if (api_strlen($dataFromCourse) >= CONFVAL_NB_CHAR_FROM_CONTENT) { echo '...'; } } echo "
    \n"; } } } } } } // End function display_digest /** * 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 .= show_notification($my_course); if ((CONFVAL_showExtractInfo == SCRIPTVAL_InCourseList || CONFVAL_showExtractInfo == SCRIPTVAL_Both) && $nbDigestEntries > 0) { reset($digest); $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; } /** * 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_global_courses_list($user_id) { //1. Get list of sessions the user is subscribed to. //2. Build an ordered list of session categories and sessions. //3. Fill this ordered list with course details. global $nosession; $charset = api_get_system_encoding(); if (api_get_setting('use_session_mode')=='true' && !$nosession) { global $now, $date_start, $date_end; } $output = array(); return $output; } /** * Returns the "what's new" icon notifications * * The general logic of this function is to track the last time the user * entered the course and compare to what has changed inside this course * since then, based on the item_property table inside this course. Note that, * if the user never entered the course before, he will not see notification * icons. This function takes session ID into account (if any) and only shows * the corresponding notifications. * @param array Course information array, containing at least elements 'db' and 'k' * @return string The HTML link to be shown next to the course */ function show_notification($my_course) { $statistic_database = Database :: get_statistic_database(); $user_id = api_get_user_id(); $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(TABLE_GROUP_USER, $course_database); $t_track_e_access = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LASTACCESS); // Get the user's last access dates to all tools of this course $sqlLastTrackInCourse = "SELECT * FROM $t_track_e_access USE INDEX (access_cours_code, access_user_id) WHERE access_cours_code = '".$my_course['k']."' AND access_user_id = '$user_id' AND access_session_id ='".$my_course['id_session']."'"; $resLastTrackInCourse = Database::query($sqlLastTrackInCourse); $oldestTrackDate = '3000-01-01 00:00:00'; while ($lastTrackInCourse = Database::fetch_array($resLastTrackInCourse)) { $lastTrackInCourseDate[$lastTrackInCourse['access_tool']] = $lastTrackInCourse['access_date']; if ($oldestTrackDate > $lastTrackInCourse['access_date']) { $oldestTrackDate = $lastTrackInCourse['access_date']; } } // Get the last edits of all tools of this course. $sql = "SELECT tet.*, tet.lastedit_date last_date, tet.tool tool, tet.ref ref, tet.lastedit_type type, tet.to_group_id group_id, ctt.image image, ctt.link link FROM $tool_edit_table tet, $course_tool_table ctt WHERE tet.lastedit_date > '$oldestTrackDate' AND ctt.name = tet.tool AND ctt.visibility = '1' AND tet.lastedit_user_id != $user_id AND tet.id_session = '".$my_course['id_session']."' ORDER BY tet.lastedit_date"; $res = Database::query($sql); // Get the group_id's with user membership. $group_ids = GroupManager :: get_group_ids($course_database, $user_id); $group_ids[] = 0; //add group 'everyone' // Filter all selected items. while ($res && ($item_property = Database::fetch_array($res))) { // First thing to check is if the user never entered the tool // or if his last visit was earlier than the last modification. if ((!isset ($lastTrackInCourseDate[$item_property['tool']]) || $lastTrackInCourseDate[$item_property['tool']] < $item_property['lastedit_date']) // Drop the tool elements that are part of a group that the // user is not part of. && ((in_array($item_property['to_group_id'], $group_ids) // Drop the dropbox, notebook and chat tools because we don't care. && ($item_property['tool'] != TOOL_DROPBOX && $item_property['tool'] != TOOL_NOTEBOOK && $item_property['tool'] != TOOL_CHAT))) // Take only what's visible or invisible but where the user is a teacher or where the visibility is unset. && ($item_property['visibility'] == '1' || ($my_course['s'] == '1' && $item_property['visibility'] == '0') || !isset($item_property['visibility']))) { // Also drop announcements and events that are not for the user or his group. if (($item_property['tool'] == TOOL_ANNOUNCEMENT || $item_property['tool'] == TOOL_CALENDAR_EVENT) && (($item_property['to_user_id'] != $user_id ) && (!isset($item_property['to_group_id']) || !in_array($item_property['to_group_id'], $group_ids)))) continue; // If it's a survey, make sure the user's invited. Otherwise drop it. if ($item_property['tool'] == TOOL_SURVEY) { $survey_info = survey_manager::get_survey($item_property['ref'], 0, $my_course['k']); $invited_users = SurveyUtil::get_invited_users($survey_info['code'], $course_database); if (!in_array($user_id, $invited_users['course_users'])) continue; } $notifications[$item_property['tool']] = $item_property; } } // Show all tool icons where there is something new. $retvalue = ' '; if (isset($notifications)) { while (list($key, $notification) = each($notifications)) { $lastDate = date('d/m/Y H:i', convert_mysql_date($notification['lastedit_date'])); $type = $notification['lastedit_type']; //$notification[image] = str_replace('.png', 'gif', $notification[image]); //$notification[image] = str_replace('.gif', '_s.gif', $notification[image]); if (empty($my_course['id_session'])) { $my_course['id_session'] = 0; } $retvalue .= ''.' '; } } return $retvalue; } /** * Retrieves the user defined course categories * @author Patrick Cool , Ghent University * @return array containing all the titles of the user defined courses with the id as key of the array */ function get_user_course_categories() { global $_user; $output = array(); $table_category = Database::get_user_personal_table(TABLE_USER_COURSE_CATEGORY); $sql = "SELECT * FROM ".$table_category." WHERE user_id='".Database::escape_string($_user['user_id'])."'"; $result = Database::query($sql); while ($row = Database::fetch_array($result)) { $output[$row['id']] = $row['title']; } return $output; } /* MAIN CODE */ /* PERSONAL COURSE LIST */ if (!isset ($maxValvas)) { $maxValvas = CONFVAL_maxValvasByCourse; // Maximum number of entries } if (!isset ($maxAgenda)) { $maxAgenda = CONFVAL_maxAgendaByCourse; // collected from each course } if (!isset ($maxCourse)) { $maxCourse = CONFVAL_maxTotalByCourse; // and displayed in summary. } $maxValvas = (int) $maxValvas; $maxAgenda = (int) $maxAgenda; $maxCourse = (int) $maxCourse; // 0 if invalid. if ($maxCourse > 0) { unset ($allentries); // We shall collect all summary$key1 entries in here: $toolsList['agenda']['name'] = get_lang('Agenda'); $toolsList['agenda']['path'] = api_get_path(WEB_CODE_PATH).'calendar/agenda.php?cidReq='; $toolsList['valvas']['name'] = get_lang('Valvas'); $toolsList['valvas']['path'] = api_get_path(WEB_CODE_PATH).'announcements/announcements.php?cidReq='; } echo '
    '; // Start of content for logged in users. // Plugins for the my courses main area. echo '
    '; api_plugin('mycourses_main'); echo '
    '; /* System Announcements */ $announcement = isset($_GET['announcement']) ? $_GET['announcement'] : -1; $visibility = api_is_allowed_to_create_course() ? VISIBLE_TEACHER : VISIBLE_STUDENT; SystemAnnouncementManager :: display_announcements($visibility, $announcement); if (!empty ($_GET['include']) && preg_match('/^[a-zA-Z0-9_-]*\.html$/',$_GET['include'])) { include ('./home/'.$_GET['include']); $pageIncluded = true; } else { /* DISPLAY COURSES */ // Compose a structured array of session categories, sessions and courses // for the current user. if (isset($_GET['history']) && intval($_GET['history']) == 1) { $courses_tree = UserManager::get_sessions_by_category($_user['user_id'], true, true); } else { $courses_tree = UserManager::get_sessions_by_category($_user['user_id'], true); } foreach ($courses_tree as $cat => $sessions) { $courses_tree[$cat]['details'] = SessionManager::get_session_category($cat); if ($cat == 0) { $courses_tree[$cat]['courses'] = CourseManager::get_courses_list_by_user_id($_user['user_id'], false); } $courses_tree[$cat]['sessions'] = array_flip(array_flip($sessions)); if (count($courses_tree[$cat]['sessions']) > 0) { foreach ($courses_tree[$cat]['sessions'] as $k => $s_id) { $courses_tree[$cat]['sessions'][$k] = array('details' => SessionManager::fetch($s_id)); $courses_tree[$cat]['sessions'][$k]['courses'] = UserManager::get_courses_list_by_session($_user['user_id'], $s_id); } } } $list = ''; foreach ($personal_course_list as $my_course) { $thisCourseDbName = $my_course['db']; $thisCourseSysCode = $my_course['k']; $thisCoursePublicCode = $my_course['c']; $thisCoursePath = $my_course['d']; $sys_course_path = api_get_path(SYS_COURSE_PATH); $dbname = $my_course['k']; $status = array(); $status[$dbname] = $my_course['s']; $nbDigestEntries = 0; // Number of entries already collected. if ($maxCourse < $maxValvas) { $maxValvas = $maxCourse; } if ($maxCourse > 0) { $courses[$thisCourseSysCode]['coursePath'] = $thisCoursePath; $courses[$thisCourseSysCode]['courseCode'] = $thisCoursePublicCode; } /* Announcements */ $course_database = $my_course['db']; $course_tool_table = Database::get_course_table(TABLE_TOOL_LIST, $course_database); $query = "SELECT visibility FROM $course_tool_table WHERE link = 'announcements/announcements.php' AND visibility = 1"; $result = Database::query($query); // Collect from announcements, but only if tool is visible for the course. if ($result && $maxValvas > 0 && Database::num_rows($result) > 0) { // Search announcements table. // Take the entries listed at the top of advalvas/announcements tool. $course_announcement_table = Database::get_course_table(TABLE_ANNOUNCEMENT); $sqlGetLastAnnouncements = "SELECT end_date publicationDate, content FROM ".$course_announcement_table; switch (CONFVAL_limitPreviewTo) { case SCRIPTVAL_NewEntriesOfTheDay : $sqlGetLastAnnouncements .= "WHERE DATE_FORMAT(end_date,'%Y %m %d') >= '".date('Y m d')."'"; break; case SCRIPTVAL_NoTimeLimit : break; case SCRIPTVAL_NewEntriesOfTheDayOfLastLogin : // take care mysql -> DATE_FORMAT(time,format) php -> date(format,date) $sqlGetLastAnnouncements .= "WHERE DATE_FORMAT(end_date,'%Y %m %d') >= '".date('Y m d', $_user['lastLogin'])."'"; } $sqlGetLastAnnouncements .= "ORDER BY end_date DESC LIMIT ".$maxValvas; $resGetLastAnnouncements = Database::query($sqlGetLastAnnouncements); if ($resGetLastAnnouncements) { while ($annoncement = Database::fetch_array($resGetLastAnnouncements)) { $keyTools = 'valvas'; $keyTime = $annoncement['publicationDate']; $keyCourse = $thisCourseSysCode; $digest[$$orderKey[0]][$$orderKey[1]][$$orderKey[2]][] = @htmlspecialchars(api_substr(strip_tags($annoncement['content']), 0, CONFVAL_NB_CHAR_FROM_CONTENT), ENT_QUOTES, $charset); $nbDigestEntries ++; // summary has same order as advalvas } } } /* Agenda */ $course_database = $my_course['db']; $course_tool_table = Database :: get_course_table(TABLE_TOOL_LIST, $course_database); $query = "SELECT visibility FROM $course_tool_table WHERE link = 'calendar/agenda.php' AND visibility = 1"; $result = Database::query($query); $thisAgenda = $maxCourse - $nbDigestEntries; // New max entries for agenda. if ($maxAgenda < $thisAgenda) { $thisAgenda = $maxAgenda; } // Collect from agenda, but only if tool is visible for the course. if ($result && $thisAgenda > 0 && Database::num_rows($result) > 0) { $tableCal = $courseTablePrefix.$thisCourseDbName.$_configuration['db_glue'].'calendar_event'; $sqlGetNextAgendaEvent = "SELECT start_date, title content, start_time FROM $tableCal WHERE start_date >= CURDATE() ORDER BY start_date, start_time LIMIT $maxAgenda"; $resGetNextAgendaEvent = Database::query($sqlGetNextAgendaEvent); if ($resGetNextAgendaEvent) { while ($agendaEvent = Database::fetch_array($resGetNextAgendaEvent)) { $keyTools = 'agenda'; $keyTime = $agendaEvent['start_date']; $keyCourse = $thisCourseSysCode; $digest[$$orderKey[0]][$$orderKey[1]][$$orderKey[2]][] = @htmlspecialchars(api_substr(strip_tags($agendaEvent['content']), 0, CONFVAL_NB_CHAR_FROM_CONTENT), ENT_QUOTES, $charset); $nbDigestEntries ++; // Summary has same order as advalvas. } } } /* Digest Display Take collected data and display it. */ //$list[] = get_logged_user_course_html($my_course); } // End while mycourse... } if (isset($_GET['history']) && intval($_GET['history']) == 1) { echo '

    '.get_lang('HistoryTrainingSession').'

    '; if (empty($courses_tree[0]['sessions'])){ echo get_lang('YouDoNotHaveAnySessionInItsHistory'); } } if (is_array($courses_tree)) { foreach ($courses_tree as $key => $category) { 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. CourseManager :: display_special_courses(api_get_user_id()); CourseManager :: display_courses(api_get_user_id()); } // Independent sessions. foreach ($category['sessions'] as $session) { // Don't show empty sessions. if (count($session['courses']) < 1) { continue; } // Courses inside the current session. $date_session_start = $session['details']['date_start']; $days_access_before_beginning = $session['details']['nb_days_access_before_beginning'] * 24 * 3600; $session_now = time(); $html_courses_session = ''; $count_courses_session = 0; foreach ($session['courses'] as $course) { $is_coach_course = api_is_coach($session['details']['id'], $course['code']); if ($is_coach_course) { $allowed_time = strtotime($date_session_start) - $days_access_before_beginning; } else { $allowed_time = strtotime($date_session_start); } if ($session_now > $allowed_time) { $c = get_logged_user_course_html($course, $session['details']['id'], 'session_course_item'); $html_courses_session .= $c[1]; $count_courses_session++; } } if ($count_courses_session > 0) { //echo '
    '; echo '
      '; echo '
    • '; //echo Display::return_icon('div_hide.gif', get_lang('Expand').'/'.get_lang('Hide'), array('align' => 'absmiddle', 'id' => 'session_img_'.$session['details']['id'])) . ' '; 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']); $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']; $session_link = Display::tag('a',$s['title'], array('href'=>api_get_path(WEB_CODE_PATH).'session/?session_id='.$session['details']['id'])); echo '' . $session_link. ' '.$extra_info.''; if (api_is_platform_admin()) { echo ''; } echo '
    • '; echo $html_courses_session; echo '
    '; } } } else { // All sessions included in. if (!empty($category['details'])) { $count_courses_session = 0; $html_sessions = ''; foreach ($category['sessions'] as $session) { // Don't show empty sessions. if (count($session['courses']) < 1) { continue; } $date_session_start = $session['details']['date_start']; $days_access_before_beginning = $session['details']['nb_days_access_before_beginning'] * 24 * 3600; $session_now = time(); $html_courses_session = ''; $count = 0; foreach ($session['courses'] as $course) { $is_coach_course = api_is_coach($session['details']['id'], $course['code']); if ($is_coach_course) { $allowed_time = strtotime($date_session_start) - $days_access_before_beginning; } else { $allowed_time = strtotime($date_session_start); } if ($session_now > $allowed_time) { $c = get_logged_user_course_html($course, $session['details']['id'], 'session_course_item'); $html_courses_session .= $c[1]; $count_courses_session++; $count++; } } if ($count > 0) { $s = get_session_title_box($session['details']['id']); $html_sessions .= ''; } } if ($count_courses_session > 0) { echo '
    '; echo '
    '; //echo Display::return_icon('div_hide.gif', get_lang('Expand').'/'.get_lang('Hide'), array('align' => 'absmiddle', 'id' => 'category_img_'.$category['details']['id'])); echo Display::return_icon('folder_blue.png', get_lang('SessionCategory'), array('width'=>'48px', 'align' => 'absmiddle')); if (api_is_platform_admin()) { echo'
    '.Display::return_icon('edit.gif', get_lang('Edit'), array('align' => 'absmiddle')).'
    '; } echo ''; echo $category['details']['name']; echo ''; echo ''; echo get_lang('From').' '.$category['details']['date_start'].' '.get_lang('Until').' '.$category['details']['date_end'].'
    '; echo ''; echo $html_sessions; echo '
    '; } } } } } /* $userdefined_categories = get_user_course_categories(); if (is_array($list)) { // Courses whithout sessions. $old_user_category = 0; foreach ($list as $key => $value) { if (empty($value[2])) { // If out of any session. $userdefined_categories = get_user_course_categories(); echo '"; } echo "\n\n\t\n"; if ($key != 0 || $value[0] != 0) { // There are courses in the previous category. echo '\n"; } } $listActives = $listInactives = $listCourses = array(); foreach ($list as $key => $value) { if ($value['active']) { // If the session is still active (as told by get_logged_user_course_html()). $listActives[] = $value; } else if (!empty($value[2])) { // If there is a session but it is not active. $listInactives[] = $value; } } $old_user_category = 0; $userdefined_categories = get_user_course_categories(); if (count($listActives) > 0 && $display_actives) { echo "'; } // Category. $name_category['name'] = $value[3]['category']; echo '\n"; } } if (!empty($value[2])) { if ((isset($old_session) && $old_session != $value[2]) or ((!isset($old_session)) && isset($value[2]))) { $old_session = $value[2]; if ($key != 0) { echo ''; } // Session. echo '\n"; echo '

    \n"; } if (count($listInactives) > 0 && !$display_actives) { echo ''; } echo '\n"; echo '

    \n"; } } */ echo '
    '; // End of content section. // Register whether full admin or null admin course // by course through an array dbname x user status. api_session_register('status'); /* RIGHT MENU */ echo '