From ac7d4bcfd1c1e3150761ace10680994a4073da30 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Wed, 10 Dec 2014 15:45:40 -0500 Subject: [PATCH] Allow subscribe users to student boss role - refs BT#9071 --- main/admin/dashboard_add_users_to_user.php | 89 ++++++++++++--- main/admin/user_list.php | 36 +++++-- main/inc/lib/main_api.lib.php | 3 +- main/inc/lib/usermanager.lib.php | 119 ++++++++++++++++----- 4 files changed, 194 insertions(+), 53 deletions(-) diff --git a/main/admin/dashboard_add_users_to_user.php b/main/admin/dashboard_add_users_to_user.php index 531a99c6f4..5d1c838629 100755 --- a/main/admin/dashboard_add_users_to_user.php +++ b/main/admin/dashboard_add_users_to_user.php @@ -40,6 +40,8 @@ $user_info = api_get_user_info($user_id); $user_anonymous = api_get_anonymous_id(); $current_user_id = api_get_user_id(); +$userStatus = api_get_user_status($user_id); + $firstLetterUser = isset($_POST['firstLetterUser']) ? $_POST['firstLetterUser'] : null; // setting the name of the tool @@ -62,7 +64,7 @@ if (!api_is_platform_admin()) { function search_users($needle,$type) { - global $tbl_access_url_rel_user, $tbl_user, $user_anonymous, $current_user_id, $user_id; + global $tbl_access_url_rel_user, $tbl_user, $user_anonymous, $current_user_id, $user_id, $userStatus; $xajax_response = new XajaxResponse(); $return = ''; @@ -70,8 +72,17 @@ function search_users($needle,$type) // xajax send utf8 datas... datas in db can be non-utf8 datas $charset = api_get_system_encoding(); $needle = api_convert_encoding($needle, $charset, 'utf-8'); + $assigned_users_to_hrm = array(); + + switch ($userStatus) { + case DRH: + $assigned_users_to_hrm = UserManager::get_users_followed_by_drh($user_id); + break; + case STUDENT_BOSS: + $assigned_users_to_hrm = UserManager::getUsersFollowedByStudentBoss($user_id); + break; + } - $assigned_users_to_hrm = UserManager::get_users_followed_by_drh($user_id); $assigned_users_id = array_keys($assigned_users_to_hrm); $without_assigned_users = ''; @@ -92,7 +103,7 @@ function search_users($needle,$type) LEFT JOIN $tbl_access_url_rel_user au ON (au.user_id = user.user_id) WHERE ".(api_sort_by_first_name() ? 'firstname' : 'lastname')." LIKE '$needle%' AND - status NOT IN(".DRH.", ".SESSIONADMIN.") AND + status NOT IN(".DRH.", ".SESSIONADMIN.", " . STUDENT_BOSS . ") AND user.user_id NOT IN ($user_anonymous, $current_user_id, $user_id) $without_assigned_users AND access_url_id = ".api_get_current_access_url_id()." @@ -104,7 +115,7 @@ function search_users($needle,$type) FROM $tbl_user user WHERE ".(api_sort_by_first_name() ? 'firstname' : 'lastname')." LIKE '$needle%' AND - status NOT IN(".DRH.", ".SESSIONADMIN.") AND + status NOT IN(".DRH.", ".SESSIONADMIN.", " . STUDENT_BOSS . ") AND user_id NOT IN ($user_anonymous, $current_user_id, $user_id) $without_assigned_users $order_clause @@ -127,10 +138,19 @@ function search_users($needle,$type) username LIKE "'.$needle.'%" OR firstname LIKE "'.$needle.'%" OR lastname LIKE "'.$needle.'%" - ) AND - user.status<>6 AND user.status<>'.DRH.' '. - $order_clause. - ' LIMIT 11'; + ) AND '; + + switch ($userStatus) { + case DRH: + $sql .= " user.status <> 6 AND user.status <> " . DRH; + break; + case STUDENT_BOSS: + $sql .= " user.status <> 6 AND user.status <> " . STUDENT_BOSS; + break; + } + + $sql .= " $order_clause LIMIT 11"; + $rs = Database::query($sql); $i = 0; while ($user = Database :: fetch_array($rs)) { @@ -267,7 +287,18 @@ if (!empty($filters) && !empty($filterData)) { $msg = ''; if (isset($_POST['formSent']) && intval($_POST['formSent']) == 1) { $user_list = $_POST['UsersList']; - $affected_rows = UserManager::suscribe_users_to_hr_manager($user_id, $user_list); + + switch ($userStatus) { + case DRH: + $affected_rows = UserManager::suscribe_users_to_hr_manager($user_id, $user_list); + break; + case STUDENT_BOSS; + $affected_rows = UserManager::subscribeUsersToBoss($user_id, $user_list); + break; + default: + $affected_rows = 0; + } + if ($affected_rows) { $msg = get_lang('AssignedUsersHaveBeenUpdatedSuccessfully'); } @@ -278,11 +309,27 @@ Display::display_header($tool_name); // actions echo '
'; -echo ' -'. - Display::return_icon('course_add.gif', get_lang('AssignCourses'), array('style'=>'vertical-align:middle')).' '.get_lang('AssignCourses').' -'. - Display::return_icon('view_more_stats.gif', get_lang('AssignSessions'), array('style'=>'vertical-align:middle')).' '.get_lang('AssignSessions').''; + +if ($userStatus != STUDENT_BOSS) { + $actions = Display::url( + Display::return_icon('course_add.gif', get_lang('AssignCourses'), + array( + 'style' => 'vertical-align:middle' + )) . get_lang('AssignCourses'), "dashboard_add_courses_to_user.php?user=$user_id" + ); + + $actions .= Display::url( + Display::return_icon('view_more_stats.gif', get_lang('AssignSessions'), + array( + 'style' => 'vertical-align:middle' + )) . get_lang('AssignSessions'), "dashboard_add_sessions_to_user.php?user=$user_id" + ); + + echo Display::span($actions, array( + 'style' => 'float: right; margin: 0; paddingg: 0;' + )); +} + echo Display::url(get_lang('AdvancedSearch'), '#', array('class' => 'advanced_options', 'id' => 'advanced_search')); echo '
'; @@ -294,7 +341,15 @@ echo Display::page_header( sprintf(get_lang('AssignUsersToX'), api_get_person_name($user_info['firstname'], $user_info['lastname'])) ); -$assigned_users_to_hrm = UserManager::get_users_followed_by_drh($user_id); +switch ($userStatus) { + case DRH: + $assigned_users_to_hrm = UserManager::get_users_followed_by_drh($user_id); + break; + case STUDENT_BOSS; + $assigned_users_to_hrm = UserManager::getUsersFollowedByStudentBoss($user_id); + break; +} + $assigned_users_id = array_keys($assigned_users_to_hrm); $without_assigned_users = ''; if (count($assigned_users_id) > 0) { @@ -329,7 +384,7 @@ if (api_is_multiple_url_enabled()) { WHERE $without_assigned_users user.user_id NOT IN ($user_anonymous, $current_user_id, $user_id) AND - status NOT IN(".DRH.", ".SESSIONADMIN.") $search_user AND + status NOT IN(".DRH.", ".SESSIONADMIN.", " . STUDENT_BOSS . ") $search_user AND access_url_id = ".api_get_current_access_url_id()." $sqlConditions ORDER BY firstname"; @@ -339,7 +394,7 @@ if (api_is_multiple_url_enabled()) { WHERE $without_assigned_users user_id NOT IN ($user_anonymous, $current_user_id, $user_id) AND - status NOT IN(".DRH.", ".SESSIONADMIN.") + status NOT IN(".DRH.", ".SESSIONADMIN.", " . STUDENT_BOSS . ") $search_user $sqlConditions ORDER BY firstname "; diff --git a/main/admin/user_list.php b/main/admin/user_list.php index 6f03438675..e995bd0802 100755 --- a/main/admin/user_list.php +++ b/main/admin/user_list.php @@ -557,13 +557,35 @@ function modify_filter($user_id, $url_params, $row) { $result .= ''.Display::return_icon('view_more_stats.gif', get_lang('AssignSessions')).'  '; }*/ } else { - if ($current_user_status_label == $statusname[DRH] || UserManager::is_admin($user_id)) { - $result .= ''.Display::return_icon('user_subscribe_course.png', get_lang('AssignUsers'),'',ICON_SIZE_SMALL).''; - $result .= ''.Display::return_icon('course_add.gif', get_lang('AssignCourses')).'  '; - $result .= ''.Display::return_icon('view_more_stats.gif', get_lang('AssignSessions')).'  '; - } else if ($current_user_status_label == $statusname[SESSIONADMIN]) { - $result .= ''.Display::return_icon('view_more_stats.gif', get_lang('AssignSessions')).'  '; - } + if ($current_user_status_label == $statusname[SESSIONADMIN]) { + $result .= Display::url( + Display::return_icon('view_more_stats.gif', get_lang('AssignSessions')), + "dashboard_add_sessions_to_user.php?user={$user_id}" + ); + } else { + if ( + $current_user_status_label == $statusname[DRH] || + UserManager::is_admin($user_id) || + $current_user_status_label == $statusname[STUDENT_BOSS] + ) { + $result .= Display::url( + Display::return_icon('user_subscribe_course.png', get_lang('AssignUsers'), '', ICON_SIZE_SMALL), + "dashboard_add_users_to_user.php?user={$user_id}" + ); + } + + if ($current_user_status_label == $statusname[DRH] || UserManager::is_admin($user_id)) { + $result .= Display::url( + Display::return_icon('course_add.gif', get_lang('AssignCourses')), + "dashboard_add_courses_to_user.php?user={$user_id}" + ); + + $result .= Display::url( + Display::return_icon('view_more_stats.gif', get_lang('AssignSessions')), + "dashboard_add_sessions_to_user.php?user={$user_id}" + ); + } + } } if (api_is_platform_admin()) { diff --git a/main/inc/lib/main_api.lib.php b/main/inc/lib/main_api.lib.php index db6553ebc3..f9b6d938a5 100755 --- a/main/inc/lib/main_api.lib.php +++ b/main/inc/lib/main_api.lib.php @@ -4648,7 +4648,8 @@ function api_get_status_langvars() { SESSIONADMIN => get_lang('SessionsAdmin', ''), DRH => get_lang('Drh', ''), STUDENT => get_lang('Student', ''), - ANONYMOUS => get_lang('Anonymous', '') + ANONYMOUS => get_lang('Anonymous', ''), + STUDENT_BOSS => get_lang('RoleStudentBoss', '') ); } diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php index a11632f33b..862c26cfaf 100755 --- a/main/inc/lib/usermanager.lib.php +++ b/main/inc/lib/usermanager.lib.php @@ -4130,6 +4130,10 @@ class UserManager )" ; break; + case STUDENT_BOSS : + $drhConditions = " AND friend_user_id = $userId AND " + . "relation_type = " . USER_RELATION_TYPE_BOSS; + break; } $join = null; @@ -4197,51 +4201,64 @@ class UserManager * */ public static function suscribe_users_to_hr_manager($hr_dept_id, $users_id) { - // Database Table Definitions - $tbl_user_rel_user = Database::get_main_table(TABLE_MAIN_USER_REL_USER); - $tbl_user_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); + return self::subscribeUsersToUser($hr_dept_id, $users_id, USER_RELATION_TYPE_RRHH); + } - $hr_dept_id = intval($hr_dept_id); - $affected_rows = 0; + /** + * Add subscribed users to a user by relation type + * @param int $userId The user id + * @param array $subscribedUsersId The id of suscribed users + * @param action $relationType The relation type + */ + public static function subscribeUsersToUser($userId, $subscribedUsersId, $relationType) + { + $userRelUserTable = Database::get_main_table(TABLE_MAIN_USER_REL_USER); + $userRelAccessUrlTable = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); + + $userId = intval($userId); + $affectedRows = 0; if (api_get_multiple_access_url()) { //Deleting assigned users to hrm_id - $sql = "SELECT s.user_id FROM $tbl_user_rel_user s - INNER JOIN $tbl_user_rel_access_url a - ON (a.user_id = s.user_id) - WHERE - friend_user_id = $hr_dept_id AND - relation_type = '".USER_RELATION_TYPE_RRHH."' AND - access_url_id = ".api_get_current_access_url_id().""; + $sql = "SELECT s.user_id FROM $userRelUserTable s " + . "INNER JOIN $userRelAccessUrlTable a ON (a.user_id = s.user_id) " + . "WHERE friend_user_id = $userId " + . "AND relation_type = $relationType " + . "AND access_url_id = " . api_get_current_access_url_id() . ""; } else { - $sql = "SELECT user_id FROM $tbl_user_rel_user - WHERE - friend_user_id = $hr_dept_id AND - relation_type = '".USER_RELATION_TYPE_RRHH."' "; + $sql = "SELECT user_id FROM $userRelUserTable " + . "WHERE friend_user_id = $userId " + . "AND relation_type = $relationType"; } + $result = Database::query($sql); + if (Database::num_rows($result) > 0) { while ($row = Database::fetch_array($result)) { - $sql = "DELETE FROM $tbl_user_rel_user - WHERE - user_id = '{$row['user_id']}' AND - friend_user_id = $hr_dept_id AND - relation_type = '".USER_RELATION_TYPE_RRHH."' "; + $sql = "DELETE FROM $userRelUserTable " + . "WHERE user_id = {$row['user_id']} " + . "AND friend_user_id = $userId " + . "AND relation_type = $relationType"; + Database::query($sql); } } // Inserting new user list - if (is_array($users_id)) { - foreach ($users_id as $user_id) { - $user_id = intval($user_id); - $sql = "INSERT IGNORE INTO $tbl_user_rel_user(user_id, friend_user_id, relation_type) - VALUES ('$user_id', $hr_dept_id, '".USER_RELATION_TYPE_RRHH."')"; + if (is_array($subscribedUsersId)) { + foreach ($subscribedUsersId as $subscribedUserId) { + $subscribedUserId = intval($subscribedUserId); + + $sql = "INSERT IGNORE INTO $userRelUserTable(user_id, friend_user_id, relation_type) " + . "VALUES ($subscribedUserId, $userId, $relationType)"; + Database::query($sql); - $affected_rows = Database::affected_rows(); + + $affectedRows = Database::affected_rows(); } } - return $affected_rows; + + return $affectedRows; } /** @@ -4857,4 +4874,50 @@ EOF; Database::query($sql); } } + + /** + * Subscribe users to student boss + * @param int $bossId The boss id + * @param array $usersId The users array + * @return int Affected rows + */ + public static function subscribeUsersToBoss($bossId, $usersId) + { + return self::subscribeUsersToUser($bossId, $usersId, USER_RELATION_TYPE_BOSS); + } + + /** + * Get users followed by student boss + * @param int $userId + * @param int $userStatus (STUDENT, COURSEMANAGER, etc) + * @param bool $getOnlyUserId + * @param bool $getSql + * @param bool $getCount + * @param int $from + * @param int $numberItems + * @param int $column + * @param string $direction + * @param int $active + * @param string $lastConnectionDate + * @return array users + */ + public static function getUsersFollowedByStudentBoss( + $userId, + $userStatus = 0, + $getOnlyUserId = false, + $getSql = false, + $getCount = false, + $from = null, + $numberItems = null, + $column = null, + $direction = null, + $active = null, + $lastConnectionDate = null + ){ + return self::getUsersFollowedByUser( + $userId, $userStatus, $getOnlyUserId, $getSql, $getCount, $from, $numberItems, $column, $direction, + $active, $lastConnectionDate, STUDENT_BOSS + ); + } + }