From 956a43c92b51ed3298aa2bd8cac51dc5eef52907 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Thu, 22 Mar 2012 19:28:42 +0100 Subject: [PATCH] HHRR role now have access to the courses/session only in a read-only mode see #4504 (requires testing) + a fix in the course notifications (next to the course title) --- main/inc/lib/course.lib.php | 57 +++++++++++++++-------------- main/inc/lib/display.lib.php | 4 +- main/inc/lib/sessionmanager.lib.php | 2 +- main/inc/lib/usermanager.lib.php | 28 ++++++++++---- main/inc/lib/userportal.lib.php | 46 ++++++++++++++--------- 5 files changed, 84 insertions(+), 53 deletions(-) diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index 5c6b56736f..3ad298060c 100644 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -2099,7 +2099,7 @@ class CourseManager { $sql = "SELECT DISTINCT(course.code), course.id as real_id FROM $tbl_course course INNER JOIN $tbl_course_user cru ON course.code=cru.course_code - WHERE cru.user_id='$user_id' $without_special_courses"; + WHERE cru.user_id='$user_id' $without_special_courses"; $result = Database::query($sql); @@ -2769,13 +2769,13 @@ class CourseManager { if (!empty($with_special_courses)) { $sql = "SELECT course.id, course.code, course.subscribe subscr, course.unsubscribe unsubscr, course_rel_user.status status, - course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat, course_rel_user.user_id - FROM $tbl_course course - LEFT JOIN $tbl_course_user 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"; + course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat, course_rel_user.user_id + FROM $tbl_course course + LEFT JOIN $tbl_course_user 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); + $number_of_courses = Database::num_rows($rs_special_course); $key = 0; $status_icon = ''; @@ -2876,6 +2876,7 @@ class CourseManager { } return $html; } + /** * Display courses inside a category (without special courses) as HTML dics of * class userportal-course-item. @@ -2899,17 +2900,17 @@ class CourseManager { $without_special_courses = ' AND course.code NOT IN ("'.implode('","',$special_course_list).'")'; } + //AND course_rel_user.relation_type<>".COURSE_RELATION_TYPE_RRHH." $sql_select_courses = "SELECT course.id, course.code, course.subscribe subscr, course.unsubscribe unsubscr, course_rel_user.status status, course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat 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_id."' - AND course_rel_user.relation_type<>".COURSE_RELATION_TYPE_RRHH." - AND course_rel_user.user_course_cat='".$user_category_id."' $without_special_courses "; + WHERE course.code = course_rel_user.course_code AND url.course_code = course.code AND + course_rel_user.user_id = '".$user_id."' 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 (api_get_multiple_access_url() && $current_url_id != -1){ + if (api_get_multiple_access_url() && $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). @@ -3050,8 +3051,7 @@ class CourseManager { * @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', $session_accessible = true, $load_dirs = false) { - global $nosession, $nbDigestEntries, $digest, $thisCourseSysCode, $orderKey; - $charset = api_get_system_encoding(); + global $nosession, $nbDigestEntries, $digest, $thisCourseSysCode, $orderKey; $user_id = api_get_user_id(); $course_info = api_get_course_info($course['code']); $status_course = CourseManager::get_user_in_course_status($user_id, $course_info['code']); @@ -3069,12 +3069,14 @@ class CourseManager { $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); $tbl_session_category = Database :: get_main_table(TABLE_MAIN_SESSION_CATEGORY); - $course_access_settings = CourseManager :: get_access_settings($course_info['code']); - $course_visibility = $course_access_settings['visibility']; + $course_access_settings = CourseManager :: get_access_settings($course_info['code']); + $course_visibility = $course_access_settings['visibility']; - $user_in_course_status = CourseManager :: get_user_in_course_status(api_get_user_id(), $course_info['code']); + $user_in_course_status = CourseManager :: get_user_in_course_status(api_get_user_id(), $course_info['code']); + // Function logic - act on the data. + /* $is_virtual_course = CourseManager :: is_virtual_course_from_system_code($course_info['code']); if ($is_virtual_course) { // If the current user is also subscribed in the real course to which this @@ -3094,7 +3096,7 @@ class CourseManager { } else { $course_display_title = $course_info['name']; $course_display_code = $course_info['official_code']; - } + }*/ $is_coach = api_is_coach($course_info['id_session'], $course['code']); @@ -3104,6 +3106,7 @@ class CourseManager { // Show a hyperlink to the course, unless the course is closed and user is not course admin. $session_url = ''; $session_title = ''; + if ($session_accessible) { if ($course_visibility != COURSE_VISIBILITY_CLOSED || $user_in_course_status == COURSEMANAGER) { if (api_get_setting('use_session_mode') == 'true' && !$nosession) { @@ -3112,17 +3115,17 @@ class CourseManager { } if ($user_in_course_status == COURSEMANAGER || ($date_start <= $now && $date_end >= $now) || $date_start == '0000-00-00') { $session_url = api_get_path(WEB_COURSE_PATH).$course_info['path'].'/?id_session='.$course_info['id_session']; - $session_title = ''.$course_display_title.''; + $session_title = ''.$course_info['name'].''; } } else { $session_url = api_get_path(WEB_COURSE_PATH).$course_info['path'].'/'; - $session_title = ''.$course_display_title.''; + $session_title = ''.$course_info['name'].''; } } else { - $session_title = $course_display_title.' '.Display::tag('span',get_lang('CourseClosed'), array('class'=>'item_closed')); + $session_title = $course_info['name'].' '.Display::tag('span',get_lang('CourseClosed'), array('class'=>'item_closed')); } } else { - $session_title = $course_display_title; + $session_title = $course_info['name']; } if (!empty($session_url)) { @@ -3139,7 +3142,7 @@ class CourseManager { } if (api_get_setting('display_coursecode_in_courselist') == 'true') { - $session_title .= $course_display_code; + $session_title .= $course_info['official_code']; } if (api_get_setting('display_teacher_in_courselist') == 'true') { @@ -3154,23 +3157,23 @@ class CourseManager { $course_coachs[] = api_get_person_name($coach_course['firstname'], $coach_course['lastname']); } } - if ($course_info['status'] == 1 || ($course_info['status'] == 5 && empty($course_info['id_session'])) || empty($course_info['status'])) { + if ($course_info['status'] == COURSEMANAGER || ($course_info['status'] == STUDENT && empty($course_info['id_session'])) || empty($course_info['status'])) { $params['teachers'] = $teacher_list; } - if (($course_info['status'] == 5 && !empty($course_info['id_session'])) || ($is_coach && $course_info['status'] != 1)) { + if (($course_info['status'] == STUDENT && !empty($course_info['id_session'])) || ($is_coach && $course_info['status'] != COURSEMANAGER)) { if (is_array($course_coachs) && count($course_coachs)> 0 ) { $params['coaches'] = implode(', ',$course_coachs); } } } else { - $params['teachers'] = $teacher_list; - + $params['teachers'] = $teacher_list; } } $session_title .= isset($course['special_course']) ? ' '.Display::return_icon('klipper.png', get_lang('CourseAutoRegister')) : ''; - // Display the "what's new" icons. + // Display the "what's new" icons + $session_title .= Display :: show_notification($course_info); $params['title'] = $session_title; diff --git a/main/inc/lib/display.lib.php b/main/inc/lib/display.lib.php index 1b20031c80..fd0e26036f 100644 --- a/main/inc/lib/display.lib.php +++ b/main/inc/lib/display.lib.php @@ -1131,9 +1131,11 @@ class Display { $retvalue = ' '; while (list($key, $notification) = each($notifications)) { $lastDate = date('d/m/Y H:i', convert_sql_date($notification['lastedit_date'])); - $type = $notification['lastedit_type']; + $type = $notification['lastedit_type']; if (empty($course_info['id_session'])) { $my_course['id_session'] = 0; + } else { + $my_course['id_session'] = $course_info['id_session']; } $retvalue .= ''. ' diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php index 28195f4d54..a3c0ee3cd5 100644 --- a/main/inc/lib/sessionmanager.lib.php +++ b/main/inc/lib/sessionmanager.lib.php @@ -1268,7 +1268,7 @@ class SessionManager { public static function get_session_category ($id) { $id = intval($id); $tbl_session_category = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY); - $sql = 'SELECT id, name, date_start, date_end FROM '.$tbl_session_category.' WHERE id="'.$id.'"'; + $sql = "SELECT id, name, date_start, date_end FROM $tbl_session_category WHERE id= $id"; $result = Database::query($sql); $num = Database::num_rows($result); if ($num>0){ diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php index ae79199359..a0189db50f 100644 --- a/main/inc/lib/usermanager.lib.php +++ b/main/inc/lib/usermanager.lib.php @@ -1767,7 +1767,7 @@ class UserManager { $sessions_sql = "SELECT DISTINCT id, session_category_id, session.name " ." FROM $tbl_session_user, $tbl_session " ." WHERE id_session=id AND id_user=$user_id " - ." AND relation_type<>".SESSION_RELATION_TYPE_RRHH." $condition_date_end " + ." $condition_date_end " ." ORDER BY session_category_id, date_start, date_end"; $result = Database::query($sessions_sql); if (Database::num_rows($result) > 0) { @@ -1777,7 +1777,7 @@ class UserManager { } } - // get the list of sessions where the user is subscribed as coach in a + // get the list of sessions where the user is subscribed as coach in a // course, from table session_rel_course_rel_user $sessions_sql = "SELECT DISTINCT id, session_category_id, session.name " @@ -1809,6 +1809,7 @@ class UserManager { $names[$row['id']] = $row['name']; } } + if ($sort_by_session_name) { // reorder sessions alphabetically inside categories if (!empty($categories)) { @@ -1824,7 +1825,7 @@ class UserManager { } } } - } + } return $categories; } @@ -2019,24 +2020,24 @@ class UserManager { $personal_course_list_sql = "SELECT DISTINCT scu.course_code as code FROM $tbl_session_course_user as scu $join_access_url WHERE scu.id_user = $user_id AND scu.id_session = $session_id $where_access_url ORDER BY code"; - + $course_list_sql_result = Database::query($personal_course_list_sql); if (Database::num_rows($course_list_sql_result) > 0) { - while ($result_row = Database::fetch_array($course_list_sql_result)) { + while ($result_row = Database::fetch_array($course_list_sql_result)) { $result_row['status'] = 5; if (!in_array($result_row['code'], $courses)) { $personal_course_list[] = $result_row; $courses[] = $result_row['code']; } } - } + } if (api_is_allowed_to_create_course()) { $personal_course_list_sql = "SELECT DISTINCT scu.course_code as code FROM $tbl_session_course_user as scu, $tbl_session as s $join_access_url WHERE s.id = $session_id AND scu.id_session = s.id AND ((scu.id_user=$user_id AND scu.status=2) OR s.id_coach = $user_id) $where_access_url - ORDER BY code"; + ORDER BY code"; $course_list_sql_result = Database::query($personal_course_list_sql); if (Database::num_rows($course_list_sql_result)>0) { @@ -2049,6 +2050,19 @@ class UserManager { } } } + + if (api_is_drh()) { + $session_list = SessionManager::get_sessions_followed_by_drh($user_id); + $session_list = array_keys($session_list); + if (in_array($session_id, $session_list)) { + $course_list = SessionManager::get_course_list_by_session_id($session_id); + if (!empty($course_list)) { + foreach ($course_list as $course) { + $personal_course_list[] = $course; + } + } + } + } return $personal_course_list; } diff --git a/main/inc/lib/userportal.lib.php b/main/inc/lib/userportal.lib.php index 607636d9f7..fd99f0617e 100644 --- a/main/inc/lib/userportal.lib.php +++ b/main/inc/lib/userportal.lib.php @@ -12,8 +12,7 @@ class IndexManager { var $home = ''; var $default_home = 'home/'; - function __construct($title, $load_template = true) { - + function __construct($title, $load_template = true) { if ($load_template) { $this->tpl = new Template($title); } @@ -968,12 +967,12 @@ class IndexManager { $courses_tree[$cat]['details'] = SessionManager::get_session_category($cat); //Get courses if ($cat == 0) { - $courses_tree[$cat]['courses'] = CourseManager::get_courses_list_by_user_id(api_get_user_id(), false); + $courses_tree[$cat]['courses'] = CourseManager::get_courses_list_by_user_id(api_get_user_id(), false); } $courses_tree[$cat]['sessions'] = array_flip(array_flip($sessions)); //Get courses in sessions if (count($courses_tree[$cat]['sessions']) > 0) { - foreach ($courses_tree[$cat]['sessions'] as $k => $s_id) { + 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(api_get_user_id(), $s_id); } @@ -984,7 +983,7 @@ class IndexManager { $html = ''; if ($load_history) { - $html .= Display::tag('h2', get_lang('HistoryTrainingSession')); + $html .= Display::page_subheader(get_lang('HistoryTrainingSession')); if (empty($courses_tree)) { $html .= get_lang('YouDoNotHaveAnySessionInItsHistory'); } @@ -994,13 +993,16 @@ class IndexManager { foreach ($courses_tree as $key => $category) { if ($key == 0) { // Sessions and courses that are not in a session category. - if (!isset($_GET['history'])) { - // If we're not in the history view... - $html .= CourseManager :: display_special_courses(api_get_user_id(), $this->load_directories_preview); + + // If we're not in the history view... + if (!isset($_GET['history'])) { // + //Display special courses + $html .= CourseManager :: display_special_courses(api_get_user_id(), $this->load_directories_preview); + //Display courses $html .= CourseManager :: display_courses(api_get_user_id(), $this->load_directories_preview); } - // Independent sessions. + // Independent sessions foreach ($category['sessions'] as $session) { // Don't show empty sessions. @@ -1039,9 +1041,13 @@ class IndexManager { $params = array(); $params['icon'] = Display::return_icon('window_list.png', null, array('id' => 'session_img_'.$session['details']['id']), ICON_SIZE_LARGE); - $s = Display :: get_session_title_box($session['details']['id']); - $extra_info = (!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'])); + $session_box = Display :: get_session_title_box($session['details']['id']); + $extra_info = (!empty($session_box['coach']) ? $session_box['coach'].' | ' : '').$session_box['dates']; + if (api_is_drh()) { + $session_link = $session_box['title']; + } else { + $session_link = Display::tag('a', $session_box['title'], array('href'=>api_get_path(WEB_CODE_PATH).'session/?session_id='.$session['details']['id'])); + } $params['title'] = $session_link.$extra_info; @@ -1062,7 +1068,7 @@ class IndexManager { // All sessions included in. if (!empty($category['details'])) { $count_courses_session = 0; - $html_sessions = ''; + $html_sessions = ''; foreach ($category['sessions'] as $session) { // Don't show empty sessions. if (count($session['courses']) < 1) { @@ -1073,6 +1079,7 @@ class IndexManager { $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) { @@ -1090,13 +1097,18 @@ class IndexManager { $params = array(); if ($count > 0) { - $s = Display :: get_session_title_box($session['details']['id']); + $session_box = Display :: get_session_title_box($session['details']['id']); $params['icon'] = Display::return_icon('window_list.png', null, array('width' => '48px', 'align' => 'absmiddle', 'id' => 'session_img_'.$session['details']['id'])) . ' '; - - $session_link = Display::tag('a',$s['title'], array('href'=>api_get_path(WEB_CODE_PATH).'session/?session_id='.$session['details']['id'])); + + if (api_is_drh()) { + $session_link = $session_box['title']; + } else { + $session_link = Display::tag('a',$session_box['title'], array('href'=>api_get_path(WEB_CODE_PATH).'session/?session_id='.$session['details']['id'])); + } + $params['title'] .= $session_link; $params['title'] .= ''; - $params['title'] .= (!empty($s['coach']) ? $s['coach'].' | ' : '').$s['dates']; + $params['title'] .= (!empty($s['coach']) ? $session_box['coach'].' | ' : '').$session_box['dates']; $params['title'] .= ''; if (api_is_platform_admin()) {