'; $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_personal_course_list($user_id) get_logged_user_course_html($my_course) get_user_course_categories() ============================================================================== */ /* ----------------------------------------------------------- Database functions some of these can go to database layer. ----------------------------------------------------------- */ /** * Database function that gets the list of courses for a particular user. * @param $user_id, the id of the user * @return 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."' ORDER BY course_rel_user.user_course_cat, course_rel_user.sort ASC,i"; $course_list_sql_result = Database::query($personal_course_list_sql, __FILE__, __LINE__); 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, __FILE__, __LINE__); 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, __FILE__, __LINE__); //$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 functions ----------------------------------------------------------- */ /** * Warning: this function defines a global. * @todo use the correct get_path function */ function display_admin_links() { global $rootAdminWeb; echo "
  • ".get_lang('PlatformAdmin')."
  • "; } /** * Enter description here... * */ function display_create_course_link() { echo "
  • ".get_lang('CourseCreate')."
  • "; } /** * Enter description here... * */ 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 format_locale_date(CONFVAL_dateFormatForInfosFromCourses, strtotime($digest[$key1])); } 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 format_locale_date(CONFVAL_dateFormatForInfosFromCourses, strtotime($key2)); } 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 = "• ".format_locale_date(CONFVAL_dateFormatForInfosFromCourses, strtotime($key3)).""; } // // // 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 $charset; global $nosession; $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 = ""; 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_coursecode_in_courselist') == 'true' && api_get_setting('display_teacher_in_courselist') == 'true') { $result .= ' – '; } 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)) { $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, __FILE__, __LINE__); $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)?true:false; } } $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; $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, __FILE__, __LINE__); $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)?true:false; } $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 $charset; global $nosession; 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 * @param array Course information array, containing at least elements 'db' and 'k' * @return string The HTML link to be shown next to the course * @version */ 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, __FILE__, __LINE__); $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))) { if ((!isset ($lastTrackInCourseDate[$item_property['tool']]) || $lastTrackInCourseDate[$item_property['tool']] < $item_property['lastedit_date']) && ((in_array($item_property['to_group_id'], $group_ids) && ($item_property['tool'] != TOOL_DROPBOX && $item_property['tool'] != TOOL_NOTEBOOK && $item_property['tool'] != TOOL_CHAT))) && ($item_property['visibility'] == '1' || ($my_course['s'] == '1' && $item_property['visibility'] == '0') || !isset ($item_property['visibility']))) { 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 ($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,__FILE__,__LINE__); 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 api_plugin('mycourses_main'); /* ----------------------------------------------------------------------------- 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[$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, __FILE__, __LINE__); 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, __FILE__, __LINE__); 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 // independent courses if(count($category['courses']) > 0) { echo ''; } } //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 ''; } } } 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 '
    '. Display::return_icon('div_hide.gif', get_lang('Expand').'/'.get_lang('Hide'), array('align' => 'absmiddle', 'id' => 'category_img_'.$category['details']['id'])) . ' ' . get_lang('SessionCategory') . ': ' . $category['details']['name'].' - '.get_lang('From').' '.$category['details']['date_start'].' '.get_lang('Until').' '.$category['details']['date_end'].'
    '; echo $html_sessions; echo '
    '; } } } } } /* 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 OR $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 ' '; // end of menu //footer Display :: display_footer();