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
+ );
+ }
+
}